+ public void initRotBySquare(final NyARLinear[] i_linear,final NyARDoublePoint2d[] i_sqvertex) throws NyARException\r
+ {\r
+ final NyARRotVector vec1=this.__initRot_vec1;\r
+ final NyARRotVector vec2=this.__initRot_vec2;\r
+\r
+ //向かい合った辺から、2本のベクトルを計算\r
+ \r
+ //軸1\r
+ vec1.exteriorProductFromLinear(i_linear[0], i_linear[2]);\r
+ vec1.checkVectorByVertex(i_sqvertex[0], i_sqvertex[1]);\r
+\r
+ //軸2\r
+ vec2.exteriorProductFromLinear(i_linear[1], i_linear[3]);\r
+ vec2.checkVectorByVertex(i_sqvertex[3], i_sqvertex[0]);\r
+\r
+ //回転の最適化?\r
+ NyARRotVector.checkRotation(vec1,vec2);\r
+\r
+ this.m00 =vec1.v1;\r
+ this.m10 =vec1.v2;\r
+ this.m20 =vec1.v3;\r
+ this.m01 =vec2.v1;\r
+ this.m11 =vec2.v2;\r
+ this.m21 =vec2.v3;\r
+ \r
+ //最後の軸を計算\r
+ final double w02 = vec1.v2 * vec2.v3 - vec1.v3 * vec2.v2;\r
+ final double w12 = vec1.v3 * vec2.v1 - vec1.v1 * vec2.v3;\r
+ final double w22 = vec1.v1 * vec2.v2 - vec1.v2 * vec2.v1;\r
+ final double w = Math.sqrt(w02 * w02 + w12 * w12 + w22 * w22);\r
+ this.m02 = w02/w;\r
+ this.m12 = w12/w;\r
+ this.m22 = w22/w;\r
+ return;\r
+ }\r