private double optimize(NyARRotMatrix_ARToolKit io_rotmat, NyARDoublePoint3d io_transvec, INyARTransportVectorSolver i_solver, NyARDoublePoint3d[] i_offset_3d, NyARDoublePoint2d[] i_2d_vertex) { NyARDoublePoint3d[] vertex_3d = this.__transMat_vertex_3d; double err = -1; //System.out.println("START"); // ループを抜けるタイミングをARToolKitと合わせるために変なことしてます。 for (int i = 0; ; i++) { // <arGetTransMat3> err = this._mat_optimize.modifyMatrix(io_rotmat, io_transvec, i_offset_3d, i_2d_vertex); io_rotmat.getPoint3dBatch(i_offset_3d, vertex_3d, 4); i_solver.solveTransportVector(vertex_3d, io_transvec); err = this._mat_optimize.modifyMatrix(io_rotmat, io_transvec, i_offset_3d, i_2d_vertex); //System.out.println("E:"+err*4); // //</arGetTransMat3> if (err < AR_GET_TRANS_MAT_MAX_FIT_ERROR || i == AR_GET_TRANS_MAT_MAX_LOOP_COUNT - 1) { break; } io_rotmat.getPoint3dBatch(i_offset_3d, vertex_3d, 4); i_solver.solveTransportVector(vertex_3d, io_transvec); } //System.out.println("END"); return(err); }
public NyARTransMat_ARToolKit(NyARParam i_param) { NyARCameraDistortionFactor dist = i_param.getDistortionFactor(); NyARPerspectiveProjectionMatrix pmat = i_param.getPerspectiveProjectionMatrix(); this._transsolver = new NyARTransportVectorSolver_ARToolKit(pmat); //互換性が重要な時は、NyARRotMatrix_ARToolKitを使うこと。 //理屈はNyARRotMatrix_NyARToolKitもNyARRotMatrix_ARToolKitも同じだけど、少しだけ値がずれる。 this._rotmatrix = new NyARRotMatrix_ARToolKit_O2(pmat); this._mat_optimize = new NyARRotMatrixOptimize_O2(pmat); this._ref_dist_factor = dist; }
private void initInstance(NyARCameraDistortionFactor i_ref_distfactor, NyARPerspectiveProjectionMatrix i_ref_projmat) { NyARCameraDistortionFactor dist = i_ref_distfactor; NyARPerspectiveProjectionMatrix pmat = i_ref_projmat; this._transsolver = new NyARTransportVectorSolver_ARToolKit(pmat); //互換性が重要な時は、NyARRotMatrix_ARToolKitを使うこと。 //理屈はNyARRotMatrix_NyARToolKitもNyARRotMatrix_ARToolKitも同じだけど、少しだけ値がずれる。 this._rotmatrix = new NyARRotMatrix_ARToolKit_O2(pmat); this._mat_optimize = new NyARRotMatrixOptimize_O2(pmat); this._ref_dist_factor = dist; }
/** * コンストラクタです。 * 座標計算に必要なオブジェクトの参照値を元に、インスタンスを生成します。 * @param i_ref_distfactor * 樽型歪み矯正オブジェクトの参照値です。歪み矯正が不要な時は、nullを指定します。 * @param i_ref_projmat * 射影変換オブジェクトの参照値です。 * @ */ public NyARTransMat_ARToolKit(INyARCameraDistortionFactor i_ref_distfactor, NyARPerspectiveProjectionMatrix i_ref_projmat) { INyARCameraDistortionFactor dist = i_ref_distfactor; NyARPerspectiveProjectionMatrix pmat = i_ref_projmat; this._transsolver = new NyARTransportVectorSolver_ARToolKit(pmat); //互換性が重要な時は、NyARRotMatrix_ARToolKitを使うこと。 //理屈はNyARRotMatrix_NyARToolKitもNyARRotMatrix_ARToolKitも同じだけど、少しだけ値がずれる。 this._rotmatrix = new NyARRotMatrix_ARToolKit_O2(pmat); this._mat_optimize = new NyARRotMatrixOptimize_O2(pmat); this._ref_dist_factor = dist; return; }
private double optimize(NyARRotMatrix_ARToolKit io_rotmat, NyARDoublePoint3d io_transvec, INyARTransportVectorSolver i_solver, NyARDoublePoint3d[] i_offset_3d, NyARDoublePoint2d[] i_2d_vertex) { NyARDoublePoint3d[] vertex_3d = this.__transMat_vertex_3d; double err = -1; //System.out.println("START"); // ループを抜けるタイミングをARToolKitと合わせるために変なことしてます。 for (int i = 0; ; i++) { // <arGetTransMat3> err = this._mat_optimize.modifyMatrix(io_rotmat, io_transvec, i_offset_3d, i_2d_vertex); io_rotmat.getPoint3dBatch(i_offset_3d, vertex_3d, 4); i_solver.solveTransportVector(vertex_3d, io_transvec); err = this._mat_optimize.modifyMatrix(io_rotmat, io_transvec, i_offset_3d, i_2d_vertex); //System.out.println("E:"+err*4); // //</arGetTransMat3> if (err < AR_GET_TRANS_MAT_MAX_FIT_ERROR || i == AR_GET_TRANS_MAT_MAX_LOOP_COUNT - 1) { break; } io_rotmat.getPoint3dBatch(i_offset_3d, vertex_3d, 4); i_solver.solveTransportVector(vertex_3d, io_transvec); } //System.out.println("END"); return err; }