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;
 }
        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;
        }