OSDN Git Service

[TAG]NyARToolkit/2.3.1
[nyartoolkit-and/nyartoolkit-and.git] / tags / 2.3.1 / test / jp / nyatla / nyartoolkit / dev / Solver.java
1 package jp.nyatla.nyartoolkit.dev;\r
2 \r
3 \r
4 \r
5 public class Solver\r
6 {\r
7         public String[][] _data=new String[4][6];\r
8         public String[] _temp=new String[6];\r
9         public Solver()\r
10         {\r
11                 this._data[0][0]="a";\r
12                 this._data[0][1]="b";\r
13                 this._data[0][2]="c";\r
14                 this._data[0][3]="d";\r
15                 this._data[0][4]="e";\r
16                 this._data[0][5]="1";\r
17                 \r
18                 this._data[1][0]="f";\r
19                 this._data[1][1]="g";\r
20                 this._data[1][2]="h";\r
21                 this._data[1][3]="i";\r
22                 this._data[1][4]="j";\r
23                 this._data[1][5]="1";\r
24                 \r
25                 this._data[2][0]="k";\r
26                 this._data[2][1]="l";\r
27                 this._data[2][2]="m";\r
28                 this._data[2][3]="n";\r
29                 this._data[2][4]="o";\r
30                 this._data[2][5]="1";\r
31 \r
32                 this._data[3][0]="p";\r
33                 this._data[3][1]="q";\r
34                 this._data[3][2]="r";\r
35                 this._data[3][3]="s";\r
36                 this._data[3][4]="t";\r
37                 this._data[3][5]="1";\r
38         }\r
39         public void dump()\r
40         {\r
41                 for(int i=0;i<this._data.length;i++){\r
42                         for(int i2=0;i2<this._data[i].length;i2++){\r
43                                 System.out.print(this._data[i][i2]+" , ");\r
44                         }                       \r
45                         System.out.println(" ");\r
46                 }\r
47         }\r
48         public boolean isSingle(String i_str)\r
49         {\r
50                 int c=0;\r
51                 for(int i=0;i<i_str.length();i++){\r
52                         if(i_str.charAt(i)=='('){\r
53                                 c++;\r
54                         }\r
55                         if(i_str.charAt(i)==')'){\r
56                                 c--;\r
57                                 if(c==0 && i!=i_str.length()-1){\r
58                                         return false;//括弧必要\r
59                                 }\r
60                         }\r
61                 }\r
62                 return true;//括弧不要\r
63         }\r
64         \r
65         public void div(int i_r,String i_e,String[] o_row) throws Exception\r
66         {\r
67                 if(i_e=="0"){\r
68                         throw new Exception();                  \r
69                 }else if(i_e=="1"){\r
70                         return;\r
71                 }\r
72                 String[] l=this._data[i_r];\r
73                 for(int i=0;i<o_row.length;i++){\r
74                         if(l[i]==i_e){\r
75                                 o_row[i]="1";\r
76                         }else if(l[i]=="0"){\r
77                                 o_row[i]="0";\r
78                         }else{\r
79                                 String s1=isSingle(l[i])?l[i]:"("+l[i]+")";\r
80                                 String s2=isSingle(i_e)?i_e:"("+i_e+")";\r
81                                 o_row[i]="("+s1+"/"+s2+")";\r
82                         }\r
83                 }\r
84         }\r
85         public void mul(int i_r,String i_e,String[] o_row)\r
86         {\r
87                 String[] l=this._data[i_r];\r
88                 if(i_e=="0"){\r
89                         for(int i=0;i<o_row.length;i++){\r
90                                 o_row[i]="0";\r
91                         }\r
92                 }else if(i_e=="1"){\r
93                         return;\r
94                 }else{\r
95                         for(int i=0;i<o_row.length;i++){\r
96                                 if(l[i]=="0"){\r
97                                         o_row[i]="0";\r
98                                 }else if(l[i]=="1"){\r
99                                         o_row[i]=i_e;\r
100                                 }else{\r
101                                         String s1=isSingle(l[i])?l[i]:"("+l[i]+")";\r
102                                         String s2=isSingle(i_e)?i_e:"("+i_e+")";\r
103                                         o_row[i]="("+s1+"*"+s2+")";\r
104                                 }\r
105                         }\r
106                 }\r
107         }\r
108         public void subRow(int i_r1,String[] i_r,String[] o_row)\r
109         {\r
110                 String[] l1=this._data[i_r1];\r
111                 String[] l2=i_r;\r
112                 for(int i=0;i<o_row.length;i++){\r
113                         if(l1[i]=="0"){\r
114                                 o_row[i]=l2[i];\r
115                         }else if(l2[i]=="0"){\r
116                                 o_row[i]=l1[i];\r
117                         }else if(l2[i]==l1[i]){\r
118                                 o_row[i]="0";\r
119                         }else{\r
120                                 String s1=isSingle(l1[i])?l1[i]:"("+l1[i]+")";\r
121                                 String s2=isSingle(l2[i])?l2[i]:"("+l2[i]+")";\r
122                                 o_row[i]="("+s1+"-"+s2+")";\r
123                         }\r
124                 }\r
125         }\r
126         public static void main(String[] args)\r
127         {\r
128                 try {\r
129                         Solver n=new Solver();\r
130 \r
131                         for(int i=0;i<4;i++){\r
132                                 for(int i2=0;i2<i;i2++){\r
133                                         n.mul(i2,n._data[i][i2],n._temp);\r
134                                         n.subRow(i,n._temp,n._data[i]);                                 \r
135                                 }\r
136                                 n.div(i,n._data[i][i],n._data[i]);\r
137                         }\r
138                         n.dump();\r
139                 } catch (Exception e) {\r
140                         e.printStackTrace();\r
141                 }\r
142 \r
143         }       \r
144 }\r