/** * この関数は、回転行列を最適化します。 * i_vertex3dのオフセット値を、io_rotとi_transで座標変換後に射影変換した2次元座標と、i_vertex2dが最も近くなるように、io_rotを調整します。 * io_rot,i_transの値は、ある程度の精度で求められている必要があります。 * @param io_rot * 調整する回転行列 * @param i_trans * 平行移動量 * @param i_vertex3d * 三次元オフセット座標 * @param i_vertex2d * 理想座標系の頂点座標 * @param i_number_of_vertex * 頂点数 * @ */ public void modifyMatrix(NyARDoubleMatrix33 io_rot, NyARDoublePoint3d i_trans, NyARDoublePoint3d[] i_vertex3d, NyARDoublePoint2d[] i_vertex2d, int i_number_of_vertex) { NyARDoublePoint3d ang = this.__ang; // ZXY系のsin/cos値を抽出 io_rot.getZXYAngle(ang); modifyMatrix(ang, i_trans, i_vertex3d, i_vertex2d, i_number_of_vertex, ang); io_rot.setZXYAngle(ang.x, ang.y, ang.z); return; }
public void modifyMatrix(NyARDoubleMatrix33 io_rot, NyARDoublePoint3d i_trans, NyARDoublePoint3d[] i_vertex3d, NyARDoublePoint2d[] i_vertex2d, int i_number_of_vertex) { TSinCosValue[] angles_in = this.__angles_in;// x,y,z NyARDoublePoint3d ang = this.__ang; // ZXY系のsin/cos値を抽出 rotation2Sincos_ZXY(io_rot, angles_in, ang); ang.x += optimizeParamX(angles_in[1], angles_in[2], i_trans, i_vertex3d, i_vertex2d, i_number_of_vertex, ang.x); ang.y += optimizeParamY(angles_in[0], angles_in[2], i_trans, i_vertex3d, i_vertex2d, i_number_of_vertex, ang.y); ang.z += optimizeParamZ(angles_in[0], angles_in[1], i_trans, i_vertex3d, i_vertex2d, i_number_of_vertex, ang.z); io_rot.setZXYAngle(ang.x, ang.y, ang.z); return; }