OSDN Git Service

[TAG]NyARToolkit/2.3.1
[nyartoolkit-and/nyartoolkit-and.git] / tags / 2.3.1 / src / jp / nyatla / nyartoolkit / core / transmat / rotmatrix / NyARRotMatrix_NyARToolKit.java
1 /* \r
2  * PROJECT: NyARToolkit\r
3  * --------------------------------------------------------------------------------\r
4  * This work is based on the original ARToolKit developed by\r
5  *   Hirokazu Kato\r
6  *   Mark Billinghurst\r
7  *   HITLab, University of Washington, Seattle\r
8  * http://www.hitl.washington.edu/artoolkit/\r
9  *\r
10  * The NyARToolkit is Java version ARToolkit class library.\r
11  * Copyright (C)2008 R.Iizuka\r
12  *\r
13  * This program is free software; you can redistribute it and/or\r
14  * modify it under the terms of the GNU General Public License\r
15  * as published by the Free Software Foundation; either version 2\r
16  * of the License, or (at your option) any later version.\r
17  * \r
18  * This program is distributed in the hope that it will be useful,\r
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
21  * GNU General Public License for more details.\r
22  * \r
23  * You should have received a copy of the GNU General Public License\r
24  * along with this framework; if not, write to the Free Software\r
25  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
26  * \r
27  * For further information please contact.\r
28  *      http://nyatla.jp/nyatoolkit/\r
29  *      <airmail(at)ebony.plala.or.jp>\r
30  * \r
31  */\r
32 package jp.nyatla.nyartoolkit.core.transmat.rotmatrix;\r
33 \r
34 import jp.nyatla.nyartoolkit.NyARException;\r
35 import jp.nyatla.nyartoolkit.core.param.*;\r
36 /**\r
37  * 回転行列計算用の、3x3行列\r
38  * 計算方法はARToolKitと同じだが、ARToolKitにある不要な行列から角度を逆算する\r
39  * 処理を省略しているため、下位12桁目の計算値が異なる。\r
40  *\r
41  */\r
42 public class NyARRotMatrix_NyARToolKit extends NyARRotMatrix_ARToolKit\r
43 {       \r
44         /**\r
45          * インスタンスを準備します。\r
46          * \r
47          * @param i_param\r
48          */\r
49         public NyARRotMatrix_NyARToolKit(NyARPerspectiveProjectionMatrix i_matrix) throws NyARException\r
50         {\r
51                 super(i_matrix);\r
52                 return;\r
53         }\r
54         public final void setAngle(final double i_x, final double i_y, final double i_z)\r
55         {\r
56                 final double sina = Math.sin(i_x);\r
57                 final double cosa = Math.cos(i_x);\r
58                 final double sinb = Math.sin(i_y);\r
59                 final double cosb = Math.cos(i_y);\r
60                 final double sinc = Math.sin(i_z);\r
61                 final double cosc = Math.cos(i_z);\r
62                 // Optimize\r
63                 final double CACA = cosa * cosa;\r
64                 final double SASA = sina * sina;\r
65                 final double SACA = sina * cosa;\r
66                 final double SASB = sina * sinb;\r
67                 final double CASB = cosa * sinb;\r
68                 final double SACACB = SACA * cosb;\r
69 \r
70                 this.m00 = CACA * cosb * cosc + SASA * cosc + SACACB * sinc - SACA * sinc;\r
71                 this.m01 = -CACA * cosb * sinc - SASA * sinc + SACACB * cosc - SACA * cosc;\r
72                 this.m02 = CASB;\r
73                 this.m10 = SACACB * cosc - SACA * cosc + SASA * cosb * sinc + CACA * sinc;\r
74                 this.m11 = -SACACB * sinc + SACA * sinc + SASA * cosb * cosc + CACA * cosc;\r
75                 this.m12 = SASB;\r
76                 this.m20 = -CASB * cosc - SASB * sinc;\r
77                 this.m21 = CASB * sinc - SASB * cosc;\r
78                 this.m22 = cosb;\r
79                 //angleを逆計算せずに直接代入\r
80                 this._angle.x=i_x;\r
81                 this._angle.y=i_y;\r
82                 this._angle.z=i_z;\r
83                 return;\r
84         }\r
85         \r
86 }\r