/Users/lyon/j4p/src/math/Mat4.java

1    package math; 
2     
3    import java.awt.*; 
4     
5    public class Mat4 { 
6        double a[] [] = 
7                {{1, 0, 0, 0}, 
8                 {0, 1, 0, 0}, 
9                 {0, 0, 1, 0}, 
10                {0, 0, 0, 1}}; 
11    
12       private static final double piOn180 = Math.PI / 180.0; 
13    
14    
15       public Mat4() { 
16       }; 
17       public Mat4(double a_[][]) { 
18           a = a_; 
19           if (a.length != 4) 
20               System.out.println("Wrong size in Mat4, Danger Will Robinson!"); 
21           if (a.length != a[0].length) 
22               System.out.println("row != col in Mat4, Take cover Dr. Smith!"); 
23       } 
24    
25       public double[][] getArray() { 
26           return a; 
27       } 
28    
29   /* 
30   To find the determinant fast, in Maple, use: 
31   with(linalg):readlib(C): 
32     a:=array(0..3,0..3,[]): 
33    C(det(matrix(a))); 
34   */ 
35       public double determinant() { 
36           double s1 = a[0][0] * a[1][1] * a[2][2] * a[3][3] - a[0][0] * a[1][1] * a[2][3] * a[3][2] - a[0] 
37                   [0] * a[2][1] * a[1][2] * a[3][3] + a[0][0] * a[2][1] * a[1][3] * a[3][2] + a[0][0] * a[3][1] * a 
38                   [1][2] * a[2][3] - a[0][0] * a[3][1] * a[1][3] * a[2][2] - a[1][0] * a[0][1] * a[2][2] * a[3][3] + 
39                   a[1][0] * a[0][1] * a[2][3] * a[3][2] + a[1][0] * a[2][1] * a[0][2] * a[3][3] - a[1][0] * a[2][1] 
40                   * a[0][3] * a[3][2] - a[1][0] * a[3][1] * a[0][2] * a[2][3] + a[1][0] * a[3][1] * a[0][3] * a[2] 
41                   [2]; 
42           return s1 + a[2][0] * a[0][1] * a[1][2] * a[3][3] - a[2][0] * a[0][1] * a[1][3] * a[3][2] - a 
43                   [2][0] * a[1][1] * a[0][2] * a[3][3] + a[2][0] * a[1][1] * a[0][3] * a[3][2] + a[2][0] * a[3][1] * 
44                   a[0][2] * a[1][3] - a[2][0] * a[3][1] * a[0][3] * a[1][2] - a[3][0] * a[0][1] * a[1][2] * a[2][3] 
45                   + a[3][0] * a[0][1] * a[1][3] * a[2][2] + a[3][0] * a[1][1] * a[0][2] * a[2][3] - a[3][0] * a[1] 
46                   [1] * a[0][3] * a[2][2] - a[3][0] * a[2][1] * a[0][2] * a[1][3] + a[3][0] * a[2][1] * a[0][3] * a 
47                   [1][2]; 
48       } 
49    
50    
51   /* 
52   To generate a time-optimal 4x4 matrix inversion, use maple: 
53   with(linalg):readlib(C): 
54    a:=array(0..3,0..3,[]): 
55    b:=array(0..3,0..3,[]): 
56    b:=inverse(matrix(a)): 
57    C(b,optimized); 
58    
59   */ 
60       public Mat4 invert() { 
61           if (determinant() == 0) { 
62               System.out.println("invert error: determinant == 0"); 
63               throw new ArithmeticException(); 
64           } 
65           double b[] [] = new double[4][4]; 
66           t14 = a[0][0] * a[1][1]; 
67           t15 = a[2][2] * a[3][3]; 
68           t17 = a[2][3] * a[3][2]; 
69           t19 = a[0][0] * a[2][1]; 
70           t20 = a[1][2] * a[3][3]; 
71           t22 = a[1][3] * a[3][2]; 
72           t24 = a[0][0] * a[3][1]; 
73           t25 = a[1][2] * a[2][3]; 
74           t27 = a[1][3] * a[2][2]; 
75           t29 = a[1][0] * a[0][1]; 
76           t32 = a[1][0] * a[2][1]; 
77           t33 = a[0][2] * a[3][3]; 
78           t35 = a[0][3] * a[3][2]; 
79           t37 = a[1][0] * a[3][1]; 
80           t38 = a[0][2] * a[2][3]; 
81           t40 = a[0][3] * a[2][2]; 
82           t42 = t14 * t15 - t14 * t17 - t19 * t20 + t19 * t22 + t24 * t25 - t24 * t27 - t29 * t15 + t29 * t17 + t32 
83                   * t33 - t32 * t35 - t37 * t38 + t37 * t40; 
84           t43 = a[2][0] * a[0][1]; 
85           t46 = a[2][0] * a[1][1]; 
86           t49 = a[2][0] * a[3][1]; 
87           t50 = a[0][2] * a[1][3]; 
88           t52 = a[0][3] * a[1][2]; 
89           t54 = a[3][0] * a[0][1]; 
90           t57 = a[3][0] * a[1][1]; 
91           t60 = a[3][0] * a[2][1]; 
92           t63 = t43 * t20 - t43 * t22 - t46 * t33 + t46 * t35 + t49 * t50 - t49 * t52 - t54 * t25 + t54 * t27 + t57 
93                   * t38 - t57 * t40 - t60 * t50 + t60 * t52; 
94           t65 = 1 / (t42 + t63); 
95           t71 = a[0][2] * a[2][1]; 
96           t73 = a[0][3] * a[2][1]; 
97           t75 = a[0][2] * a[3][1]; 
98           t77 = a[0][3] * a[3][1]; 
99           t81 = a[0][1] * a[1][2]; 
100          t83 = a[0][1] * a[1][3]; 
101          t85 = a[0][2] * a[1][1]; 
102          t87 = a[0][3] * a[1][1]; 
103          t101 = a[1][0] * a[2][2]; 
104          t103 = a[1][0] * a[2][3]; 
105          t105 = a[2][0] * a[1][2]; 
106          t107 = a[2][0] * a[1][3]; 
107          t109 = a[3][0] * a[1][2]; 
108          t111 = a[3][0] * a[1][3]; 
109          t115 = a[0][0] * a[2][2]; 
110          t117 = a[0][0] * a[2][3]; 
111          t119 = a[2][0] * a[0][2]; 
112          t121 = a[2][0] * a[0][3]; 
113          t123 = a[3][0] * a[0][2]; 
114          t125 = a[3][0] * a[0][3]; 
115          t129 = a[0][0] * a[1][2]; 
116          t131 = a[0][0] * a[1][3]; 
117          t133 = a[1][0] * a[0][2]; 
118          t135 = a[1][0] * a[0][3]; 
119          b[0][0] = (a[1][1] * a[2][2] * a[3][3] - a[1][1] * a[2][3] * a[3][2] - a[2][1] * a[1] 
120                  [2] * a[3][3] + a[2][1] * a[1][3] * a[3][2] + a[3][1] * a[1][2] * a[2][3] - a[3][1] * a[1][3] * a 
121                  [2][2]) * t65; 
122          b[0][1] = -(a[0][1] * a[2][2] * a[3][3] - a[0][1] * a[2][3] * a[3][2] - t71 * a[3][3] + 
123                  t73 * a[3][2] + t75 * a[2][3] - t77 * a[2][2]) * t65; 
124          b[0][2] = (t81 * a[3][3] - t83 * a[3][2] - t85 * a[3][3] + t87 * a[3][2] + t75 * a[1][3] - 
125                  t77 * a[1][2]) * t65; 
126          b[0][3] = -(t81 * a[2][3] - t83 * a[2][2] - t85 * a[2][3] + t87 * a[2][2] + t71 * a[1][3] - 
127                  t73 * a[1][2]) * t65; 
128          b[1][0] = -(t101 * a[3][3] - t103 * a[3][2] - t105 * a[3][3] + t107 * a[3][2] + t109 * a[2] 
129                  [3] - t111 * a[2][2]) * t65; 
130          b[1][1] = (t115 * a[3][3] - t117 * a[3][2] - t119 * a[3][3] + t121 * a[3][2] + t123 * a[2] 
131                  [3] - t125 * a[2][2]) * t65; 
132          b[1][2] = -(t129 * a[3][3] - t131 * a[3][2] - t133 * a[3][3] + t135 * a[3][2] + t123 * a[1] 
133                  [3] - t125 * a[1][2]) * t65; 
134          b[1][3] = (t129 * a[2][3] - t131 * a[2][2] - t133 * a[2][3] + t135 * a[2][2] + t119 * a[1] 
135                  [3] - t121 * a[1][2]) * t65; 
136          b[2][0] = (t32 * a[3][3] - t103 * a[3][1] - t46 * a[3][3] + t107 * a[3][1] + t57 * a[2][3] - 
137                  t111 * a[2][1]) * t65; 
138          b[2][1] = -(t19 * a[3][3] - t117 * a[3][1] - t43 * a[3][3] + t121 * a[3][1] + t54 * a[2][3] 
139                  - t125 * a[2][1]) * t65; 
140          b[2][2] = (t14 * a[3][3] - t131 * a[3][1] - t29 * a[3][3] + t135 * a[3][1] + t54 * a[1][3] - 
141                  t125 * a[1][1]) * t65; 
142          b[2][3] = -(t14 * a[2][3] - t131 * a[2][1] - t29 * a[2][3] + t135 * a[2][1] + t43 * a[1][3] 
143                  - t121 * a[1][1]) * t65; 
144          b[3][0] = -(t32 * a[3][2] - t101 * a[3][1] - t46 * a[3][2] + t105 * a[3][1] + t57 * a[2][2] 
145                  - t109 * a[2][1]) * t65; 
146          b[3][1] = (t19 * a[3][2] - t115 * a[3][1] - t43 * a[3][2] + t119 * a[3][1] + t54 * a[2][2] - 
147                  t123 * a[2][1]) * t65; 
148          b[3][2] = -(t14 * a[3][2] - t129 * a[3][1] - t29 * a[3][2] + t133 * a[3][1] + t54 * a[1][2] 
149                  - t123 * a[1][1]) * t65; 
150          b[3][3] = (t14 * a[2][2] - t129 * a[2][1] - t29 * a[2][2] + t133 * a[2][1] + t43 * a[1][2] - 
151                  t119 * a[1][1]) * t65; 
152   
153          return new Mat4(b); 
154      } 
155  /* To generate a new matrix, transposed: 
156   with(linalg):readlib(C): 
157   a:=array(0..3,0..3,[]): 
158   b:=array(0..3,0..3,[]): 
159   b:=transpose(matrix(a)): 
160   C(b,optimized); 
161  */ 
162      public Mat4 transpose() { 
163          double b[][] = new double[3][3]; 
164          b[0][0] = a[0][0]; 
165          b[0][1] = a[1][0]; 
166          b[0][2] = a[2][0]; 
167          b[0][3] = a[3][0]; 
168          b[1][0] = a[0][1]; 
169          b[1][1] = a[1][1]; 
170          b[1][2] = a[2][1]; 
171          b[1][3] = a[3][1]; 
172          b[2][0] = a[0][2]; 
173          b[2][1] = a[1][2]; 
174          b[2][2] = a[2][2]; 
175          b[2][3] = a[3][2]; 
176          b[3][0] = a[0][3]; 
177          b[3][1] = a[1][3]; 
178          b[3][2] = a[2][3]; 
179          b[3][3] = a[3][3]; 
180          return new Mat4(b); 
181      } 
182   
183  /* 
184   To multiply two 4x4's, fast, use: 
185   
186  with(linalg): 
187    readlib(C): 
188    a:=array(0..3,0..3,[]): 
189    b:=array(0..3,0..3,[]): 
190    c:=array(0..3,0..3,[]): 
191    c:=multiply(matrix(b),matrix(a)): 
192    C(c,optimized); 
193  */ 
194   
195      public Mat4 multiply(Mat4 bmat4) { 
196          double c [][] = new double[4][4]; 
197          double b [][] = bmat4.getArray(); 
198          c[0][0] = b[0][0] * a[0][0] + b[0][1] * a[1][0] + b[0][2] * a[2][0] + b[0][3] * a[3][0]; 
199          c[0][1] = b[0][0] * a[0][1] + b[0][1] * a[1][1] + b[0][2] * a[2][1] + b[0][3] * a[3][1]; 
200          c[0][2] = b[0][0] * a[0][2] + b[0][1] * a[1][2] + b[0][2] * a[2][2] + b[0][3] * a[3][2]; 
201          c[0][3] = b[0][0] * a[0][3] + b[0][1] * a[1][3] + b[0][2] * a[2][3] + b[0][3] * a[3][3]; 
202          c[1][0] = b[1][0] * a[0][0] + b[1][1] * a[1][0] + b[1][2] * a[2][0] + b[1][3] * a[3][0]; 
203          c[1][1] = b[1][0] * a[0][1] + b[1][1] * a[1][1] + b[1][2] * a[2][1] + b[1][3] * a[3][1]; 
204          c[1][2] = b[1][0] * a[0][2] + b[1][1] * a[1][2] + b[1][2] * a[2][2] + b[1][3] * a[3][2]; 
205          c[1][3] = b[1][0] * a[0][3] + b[1][1] * a[1][3] + b[1][2] * a[2][3] + b[1][3] * a[3][3]; 
206          c[2][0] = b[2][0] * a[0][0] + b[2][1] * a[1][0] + b[2][2] * a[2][0] + b[2][3] * a[3][0]; 
207          c[2][1] = b[2][0] * a[0][1] + b[2][1] * a[1][1] + b[2][2] * a[2][1] + b[2][3] * a[3][1]; 
208          c[2][2] = b[2][0] * a[0][2] + b[2][1] * a[1][2] + b[2][2] * a[2][2] + b[2][3] * a[3][2]; 
209          c[2][3] = b[2][0] * a[0][3] + b[2][1] * a[1][3] + b[2][2] * a[2][3] + b[2][3] * a[3][3]; 
210          c[3][0] = b[3][0] * a[0][0] + b[3][1] * a[1][0] + b[3][2] * a[2][0] + b[3][3] * a[3][0]; 
211          c[3][1] = b[3][0] * a[0][1] + b[3][1] * a[1][1] + b[3][2] * a[2][1] + b[3][3] * a[3][1]; 
212          c[3][2] = b[3][0] * a[0][2] + b[3][1] * a[1][2] + b[3][2] * a[2][2] + b[3][3] * a[3][2]; 
213          c[3][3] = b[3][0] * a[0][3] + b[3][1] * a[1][3] + b[3][2] * a[2][3] + b[3][3] * a[3][3]; 
214          return (new Mat4(c)); 
215      } 
216   
217      public static Mat4 polygonToMat4(Polygon p) { 
218          if (p.npoints != 4) 
219              System.out.println("wrong number of points in Mat4:polygonToMat4"); 
220          // use the point points in the polygon to construct a 
221          // matrix of the form: 
222          // [uv u v 1] 
223          int u[] = p.xpoints; 
224          int v[] = p.ypoints; 
225          double b[][] = { 
226              {u[0], v[0], u[0] * v[0], 1}, 
227              {u[1], v[1], u[1] * v[1], 1}, 
228              {u[2], v[2], u[2] * v[2], 1}, 
229              {u[3], v[3], u[3] * v[3], 1}}; 
230          return new Mat4(b); 
231      } 
232  /* 
233  To do a fast premultply of a 2x4*4x4, 
234  use: 
235  with(linalg): 
236      readlib(C): 
237      a:=array(0..3,0..3,[]): 
238      b:=array(0..1,0..3,[]): 
239      c:=array(0..1,0..3,[]): 
240      c:=multiply(matrix(b),matrix(a)): 
241      C(c,optimized); 
242  */ 
243      public double[][] multiply2x4(double b[][]) { 
244          if (b.length != 2) 
245              System.out.println("multiply2x4: bad b.length"); 
246          if (b[0].length != 4) 
247              System.out.println("multiply2x4: bad b[0].length"); 
248          double c[][] = new double[2][4]; 
249          c[0][0] = b[0][0] * a[0][0] + b[0][1] * a[1][0] + b[0][2] * a[2][0] + b[0][3] * a[3][0]; 
250          c[0][1] = b[0][0] * a[0][1] + b[0][1] * a[1][1] + b[0][2] * a[2][1] + b[0][3] * a[3][1]; 
251          c[0][2] = b[0][0] * a[0][2] + b[0][1] * a[1][2] + b[0][2] * a[2][2] + b[0][3] * a[3][2]; 
252          c[0][3] = b[0][0] * a[0][3] + b[0][1] * a[1][3] + b[0][2] * a[2][3] + b[0][3] * a[3][3]; 
253          c[1][0] = b[1][0] * a[0][0] + b[1][1] * a[1][0] + b[1][2] * a[2][0] + b[1][3] * a[3][0]; 
254          c[1][1] = b[1][0] * a[0][1] + b[1][1] * a[1][1] + b[1][2] * a[2][1] + b[1][3] * a[3][1]; 
255          c[1][2] = b[1][0] * a[0][2] + b[1][1] * a[1][2] + b[1][2] * a[2][2] + b[1][3] * a[3][2]; 
256          c[1][3] = b[1][0] * a[0][3] + b[1][1] * a[1][3] + b[1][2] * a[2][3] + b[1][3] * a[3][3]; 
257          return c; 
258      } 
259   
260  /* 
261   To get 4x2 = 4x4*4x2 , fast, use: 
262   
263  with(linalg): 
264     readlib(C): 
265     a:=array(0..3,0..3,[]): 
266     b:=array(0..3,0..1,[]): 
267     c:=array(0..3,0..1,[]): 
268     c:=multiply(matrix(a),matrix(b)): 
269     C(c,optimized); 
270  */ 
271      public double[][] multiply4x2(double b[][]) { 
272          if (b.length != 4) 
273              System.out.println("multiply4x2: bad b.length"); 
274          if (b[0].length != 2) 
275              System.out.println("multiply4x2: bad b[0].length"); 
276          double c[][] = new double[4][2]; 
277          c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0] + a[0][3] * b[3][0]; 
278          c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1] + a[0][3] * b[3][1]; 
279          c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0] + a[1][3] * b[3][0]; 
280          c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1] + a[1][3] * b[3][1]; 
281          c[2][0] = a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0] + a[2][3] * b[3][0]; 
282          c[2][1] = a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1] + a[2][3] * b[3][1]; 
283          c[3][0] = a[3][0] * b[0][0] + a[3][1] * b[1][0] + a[3][2] * b[2][0] + a[3][3] * b[3][0]; 
284          c[3][1] = a[3][0] * b[0][1] + a[3][1] * b[1][1] + a[3][2] * b[2][1] + a[3][3] * b[3][1]; 
285          return c; 
286      } 
287   
288      public void print(String s) { 
289          System.out.println(s); 
290          print(); 
291      } 
292   
293      public void print() { 
294          for (int i = 0; i < a.length; i++) { 
295              for (int j = 0; j < a[0].length; j++) 
296                  System.out.print(a[i][j] + " "); 
297              System.out.println(); 
298          } 
299      } 
300   
301      static double t0 = 0; 
302      static double t1 = 0; 
303      static double t2 = 0; 
304      static double t3 = 0; 
305      static double t4 = 0; 
306      static double t5 = 0; 
307      static double t6 = 0; 
308      static double t7 = 0; 
309      static double t8 = 0; 
310      static double t9 = 0; 
311      static double t10 = 0; 
312      static double t11 = 0; 
313      static double t12 = 0; 
314      static double t13 = 0; 
315      static double t14 = 0; 
316      static double t15 = 0; 
317      static double t16 = 0; 
318      static double t17 = 0; 
319      static double t18 = 0; 
320      static double t19 = 0; 
321      static double t20 = 0; 
322      static double t21 = 0; 
323      static double t22 = 0; 
324      static double t23 = 0; 
325      static double t24 = 0; 
326      static double t25 = 0; 
327      static double t26 = 0; 
328      static double t27 = 0; 
329      static double t28 = 0; 
330      static double t29 = 0; 
331      static double t30 = 0; 
332      static double t31 = 0; 
333      static double t32 = 0; 
334      static double t33 = 0; 
335      static double t34 = 0; 
336      static double t35 = 0; 
337      static double t36 = 0; 
338      static double t37 = 0; 
339      static double t38 = 0; 
340      static double t39 = 0; 
341      static double t40 = 0; 
342      static double t41 = 0; 
343      static double t42 = 0; 
344      static double t43 = 0; 
345      static double t44 = 0; 
346      static double t45 = 0; 
347      static double t46 = 0; 
348      static double t47 = 0; 
349      static double t48 = 0; 
350      static double t49 = 0; 
351      static double t50 = 0; 
352      static double t51 = 0; 
353      static double t52 = 0; 
354      static double t53 = 0; 
355      static double t54 = 0; 
356      static double t55 = 0; 
357      static double t56 = 0; 
358      static double t57 = 0; 
359      static double t58 = 0; 
360      static double t59 = 0; 
361      static double t60 = 0; 
362      static double t61 = 0; 
363      static double t62 = 0; 
364      static double t63 = 0; 
365      static double t64 = 0; 
366      static double t65 = 0; 
367      static double t66 = 0; 
368      static double t67 = 0; 
369      static double t68 = 0; 
370      static double t69 = 0; 
371      static double t70 = 0; 
372      static double t71 = 0; 
373      static double t72 = 0; 
374      static double t73 = 0; 
375      static double t74 = 0; 
376      static double t75 = 0; 
377      static double t76 = 0; 
378      static double t77 = 0; 
379      static double t78 = 0; 
380      static double t79 = 0; 
381      static double t80 = 0; 
382      static double t81 = 0; 
383      static double t82 = 0; 
384      static double t83 = 0; 
385      static double t84 = 0; 
386      static double t85 = 0; 
387      static double t86 = 0; 
388      static double t87 = 0; 
389      static double t88 = 0; 
390      static double t89 = 0; 
391      static double t90 = 0; 
392      static double t91 = 0; 
393      static double t92 = 0; 
394      static double t93 = 0; 
395      static double t94 = 0; 
396      static double t95 = 0; 
397      static double t96 = 0; 
398      static double t97 = 0; 
399      static double t98 = 0; 
400      static double t99 = 0; 
401      static double t100 = 0; 
402      static double t101 = 0; 
403      static double t102 = 0; 
404      static double t103 = 0; 
405      static double t104 = 0; 
406      static double t105 = 0; 
407      static double t106 = 0; 
408      static double t107 = 0; 
409      static double t108 = 0; 
410      static double t109 = 0; 
411      static double t110 = 0; 
412      static double t111 = 0; 
413      static double t112 = 0; 
414      static double t113 = 0; 
415      static double t114 = 0; 
416      static double t115 = 0; 
417      static double t116 = 0; 
418      static double t117 = 0; 
419      static double t118 = 0; 
420      static double t119 = 0; 
421      static double t120 = 0; 
422      static double t121 = 0; 
423      static double t122 = 0; 
424      static double t123 = 0; 
425      static double t124 = 0; 
426      static double t125 = 0; 
427      static double t126 = 0; 
428      static double t127 = 0; 
429      static double t128 = 0; 
430      static double t129 = 0; 
431      static double t130 = 0; 
432      static double t131 = 0; 
433      static double t132 = 0; 
434      static double t133 = 0; 
435      static double t134 = 0; 
436      static double t135 = 0; 
437      static double t136 = 0; 
438      static double t137 = 0; 
439      static double t138 = 0; 
440      static double t139 = 0; 
441      static double t140 = 0; 
442      static double t141 = 0; 
443      static double t142 = 0; 
444      static double t143 = 0; 
445      static double t144 = 0; 
446      static double t145 = 0; 
447      static double t146 = 0; 
448      static double t147 = 0; 
449      static double t148 = 0; 
450      static double t149 = 0; 
451      static double t150 = 0; 
452      static double t151 = 0; 
453      static double t152 = 0; 
454      static double t153 = 0; 
455      static double t154 = 0; 
456      static double t155 = 0; 
457      static double t156 = 0; 
458      static double t157 = 0; 
459      static double t158 = 0; 
460      static double t159 = 0; 
461      static double t160 = 0; 
462      static double t161 = 0; 
463      static double t162 = 0; 
464      static double t163 = 0; 
465      static double t164 = 0; 
466      static double t165 = 0; 
467      static double t166 = 0; 
468      static double t167 = 0; 
469      static double t168 = 0; 
470      static double t169 = 0; 
471      static double t170 = 0; 
472      static double t171 = 0; 
473      static double t172 = 0; 
474      static double t173 = 0; 
475      static double t174 = 0; 
476      static double t175 = 0; 
477      static double t176 = 0; 
478      static double t177 = 0; 
479      static double t178 = 0; 
480      static double t179 = 0; 
481      static double t180 = 0; 
482      static double t181 = 0; 
483      static double t182 = 0; 
484      static double t183 = 0; 
485      static double t184 = 0; 
486      static double t185 = 0; 
487      static double t186 = 0; 
488      static double t187 = 0; 
489      static double t188 = 0; 
490      static double t189 = 0; 
491      static double t190 = 0; 
492      static double t191 = 0; 
493      static double t192 = 0; 
494      static double t193 = 0; 
495      static double t194 = 0; 
496      static double t195 = 0; 
497      static double t196 = 0; 
498      static double t197 = 0; 
499      static double t198 = 0; 
500      static double t199 = 0; 
501      static double t200 = 0; 
502      static double t201 = 0; 
503      static double t202 = 0; 
504      static double t203 = 0; 
505      static double t204 = 0; 
506      static double t205 = 0; 
507      static double t206 = 0; 
508      static double t207 = 0; 
509      static double t208 = 0; 
510      static double t209 = 0; 
511      static double t210 = 0; 
512      static double t211 = 0; 
513      static double t212 = 0; 
514      static double t213 = 0; 
515      static double t214 = 0; 
516      static double t215 = 0; 
517      static double t216 = 0; 
518      static double t217 = 0; 
519      static double t218 = 0; 
520      static double t219 = 0; 
521      static double t220 = 0; 
522      static double t221 = 0; 
523      static double t222 = 0; 
524      static double t223 = 0; 
525      static double t224 = 0; 
526      static double t225 = 0; 
527      static double t226 = 0; 
528      static double t227 = 0; 
529      static double t228 = 0; 
530      static double t229 = 0; 
531      static double t230 = 0; 
532      static double t231 = 0; 
533      static double t232 = 0; 
534      static double t233 = 0; 
535      static double t234 = 0; 
536      static double t235 = 0; 
537      static double t236 = 0; 
538      static double t237 = 0; 
539      static double t238 = 0; 
540      static double t239 = 0; 
541      static double t240 = 0; 
542      static double t241 = 0; 
543      static double t242 = 0; 
544      static double t243 = 0; 
545      static double t244 = 0; 
546      static double t245 = 0; 
547      static double t246 = 0; 
548      static double t247 = 0; 
549      static double t248 = 0; 
550      static double t249 = 0; 
551   
552  } 
553   
554