O += f * f + c * c;\r
\r
}\r
- L *= 2;\r
- J = (J + J) / L;\r
- K = (K + K) / L;\r
- N /= L;\r
- M /= L;\r
- O /= L;\r
- return getMinimumErrorAngleFromParam(J, K, M, N, O, i_hint_angle);\r
+ L *=2;\r
+ J *=2;\r
+ K *=2;\r
+\r
+ return getMinimumErrorAngleFromParam(L,J, K, M, N, O, i_hint_angle);\r
+\r
\r
}\r
\r
\r
}\r
L *= 2;\r
- J = (J + J) / L;\r
- K = (K + K) / L;\r
- N /= L;\r
- M /= L;\r
- O /= L;\r
- return getMinimumErrorAngleFromParam(J, K, M, N, O, i_hint_angle);\r
+ J *= 2;\r
+ K *= 2;\r
+ return getMinimumErrorAngleFromParam(L,J, K, M, N, O, i_hint_angle);\r
+\r
}\r
\r
private double optimizeParamZ(TSinCosValue i_angle_x, TSinCosValue i_angle_y, NyARDoublePoint3d i_trans, NyARDoublePoint3d[] i_vertex3d, NyARDoublePoint2d[] i_vertex2d, int i_number_of_vertex, double i_hint_angle) throws NyARException\r
O += f * f + c * c;\r
\r
}\r
- L *= 2;\r
- J = (J + J) / L;\r
- K = (K + K) / L;\r
- N /= L;\r
- M /= L;\r
- O /= L;\r
- return getMinimumErrorAngleFromParam(J, K, M, N, O, i_hint_angle);\r
+ L *=2;\r
+ J *=2;\r
+ K *=2;\r
+ \r
+ return getMinimumErrorAngleFromParam(L,J, K, M, N, O, i_hint_angle);\r
}\r
private TSinCosValue[] __angles_in=TSinCosValue.createArray(3);\r
private NyARDoublePoint3d __ang=new NyARDoublePoint3d();\r
/**\r
* エラーレートが最小になる点を得る。\r
*/\r
- private double getMinimumErrorAngleFromParam(double iJ, double iK, double iM, double iN, double iO, double i_hint_angle) throws NyARException\r
+ private double getMinimumErrorAngleFromParam(double iL,double iJ, double iK, double iM, double iN, double iO, double i_hint_angle) throws NyARException\r
{\r
double[] sin_table = this.__sin_table;\r
\r
- double M = iN - iM;\r
- double J = iJ;\r
- double K = -iK;\r
+ double M = (iN - iM)/iL;\r
+ double J = iJ/iL;\r
+ double K = -iK/iL;\r
\r
// パラメータからsinテーブルを作成\r
// (- 4*M^2-4)*x^4 + (4*K- 4*J*M)*x^3 + (4*M^2 -(K^2- 4)- J^2)*x^2 +(4*J*M- 2*K)*x + J^2-1 = 0\r
cos_rt = (a1 < a2) ? cos_rt : -cos_rt;\r
double ang = Math.atan2(sin_rt, cos_rt);\r
// エラー値を計算\r
- double err = iN * sin_rt * sin_rt + (cos_rt + iJ) * sin_rt + iM * cos_rt * cos_rt + iK * cos_rt + iO;\r
+ double err = iN * sin_rt * sin_rt + (iL*cos_rt + iJ) * sin_rt + iM * cos_rt * cos_rt + iK * cos_rt + iO;\r
// 最小の2個を獲得する。\r
if (min_err_0 > err) {\r
min_err_1 = min_err_0;\r