OSDN Git Service

[リリース]NyARToolkit 1.2.0
[nyartoolkit-and/nyartoolkit-and.git] / src / jp / nyatla / nyartoolkit / core / NyARMat.java
index 98125e1..4b26969 100644 (file)
@@ -50,8 +50,16 @@ public class NyARMat{
      * 返された配列のサイズを行列の大きさとして使わないこと!\r
      * \r
      */\r
-    private double[][] m;\r
+    protected double[][] m;\r
     private int clm,row;\r
+    /**\r
+     * デフォルトコンストラクタは機能しません。\r
+     * @throws NyARException\r
+     */\r
+    protected NyARMat() throws NyARException\r
+    {\r
+       throw new NyARException();\r
+    }\r
     public NyARMat(int i_row,int i_clm)\r
     {\r
        m=new double[i_row][i_clm];\r
@@ -97,6 +105,25 @@ public class NyARMat{
            }\r
        }\r
     }\r
+    /**\r
+     * i_copy_fromの内容を自分自身にコピーします。\r
+     * 高さ・幅は同一で無いと失敗します。\r
+     * @param i_copy_from\r
+     */\r
+    public void copyFrom(NyARMat i_copy_from)throws NyARException\r
+    {\r
+       //サイズ確認\r
+       if(this.row!=i_copy_from.row ||this.clm!=i_copy_from.clm)\r
+       {\r
+           throw new NyARException();\r
+       }\r
+       //値コピー\r
+       for(int r=this.row-1;r>=0;r--){\r
+           for(int c=this.clm-1;c>=0;c--){\r
+               this.m[r][c]=i_copy_from.m[r][c];\r
+           }\r
+       }\r
+    }\r
 \r
     public double[][] getArray()\r
     {\r
@@ -132,15 +159,18 @@ public class NyARMat{
        }\r
     }\r
     private int[] wk_nos_matrixSelfInv=new int[50];\r
-    private final static double matrixSelfInv_epsl=1.0e-10;\r
+//    private final static double matrixSelfInv_epsl=1.0e-10;\r
     /**\r
      * i_targetを逆行列に変換する。arMatrixSelfInv()と、arMatrixSelfInv_minv()関数を合成してあります。\r
      * OPTIMIZE STEP[485->422]\r
      * @param i_target\r
      * 逆行列にする行列\r
+     * @return\r
+     * 逆行列があればTRUE/無ければFALSE\r
+     * \r
      * @throws NyARException\r
      */\r
-    public void matrixSelfInv() throws NyARException\r
+    public boolean matrixSelfInv() throws NyARException\r
     {\r
        double[][] ap=this.m;\r
        int dimen=this.row;\r
@@ -157,7 +187,7 @@ public class NyARMat{
            throw new NyARException();\r
        case 1:\r
            ap[0][0]=1.0/ap[0][0];//*ap = 1.0 / (*ap);\r
-           return;/* 1 dimension */\r
+           return true;/* 1 dimension */\r
        }\r
 \r
         for(int n = 0; n < dimen ; n++){\r
@@ -180,8 +210,10 @@ public class NyARMat{
                    ip = i;\r
                }\r
             }\r
-            if (p <= matrixSelfInv_epsl){\r
-                return;\r
+//          if (p <= matrixSelfInv_epsl){\r
+            if(p==0.0){\r
+               return false;\r
+//                throw new NyARException();\r
             }\r
 \r
             nwork  = nos[ip];\r
@@ -227,7 +259,7 @@ public class NyARMat{
                 ap_i[n]=work;//*wbp = work;\r
            }\r
         }\r
-        return;\r
+        return true;\r
     }\r
     /**\r
      * sourceの転置行列をdestに得る。arMatrixTrans()の代替品\r