JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / math / RotatableMatrix.js
1 Clazz.declarePackage ("jalview.math");\r
2 c$ = Clazz.decorateAsClass (function () {\r
3 this.matrix = null;\r
4 this.temp = null;\r
5 this.rot = null;\r
6 Clazz.instantialize (this, arguments);\r
7 }, jalview.math, "RotatableMatrix");\r
8 Clazz.makeConstructor (c$, \r
9 function (rows, cols) {\r
10 this.matrix =  Clazz.newFloatArray (rows, cols, 0);\r
11 this.temp =  Clazz.newFloatArray (3, 0);\r
12 this.rot =  Clazz.newFloatArray (3, 3, 0);\r
13 }, "~N,~N");\r
14 Clazz.defineMethod (c$, "addElement", \r
15 function (i, j, value) {\r
16 this.matrix[i][j] = value;\r
17 }, "~N,~N,~N");\r
18 Clazz.defineMethod (c$, "print", \r
19 function () {\r
20 System.out.println (this.matrix[0][0] + " " + this.matrix[0][1] + " " + this.matrix[0][2]);\r
21 System.out.println (this.matrix[1][0] + " " + this.matrix[1][1] + " " + this.matrix[1][2]);\r
22 System.out.println (this.matrix[2][0] + " " + this.matrix[2][1] + " " + this.matrix[2][2]);\r
23 });\r
24 Clazz.defineMethod (c$, "rotate", \r
25 function (degrees, axis) {\r
26 var costheta = Math.cos ((degrees * 3.141592653589793) / 180.0);\r
27 var sintheta = Math.sin ((degrees * 3.141592653589793) / 180.0);\r
28 if (axis == 'z') {\r
29 this.rot[0][0] = costheta;\r
30 this.rot[0][1] = -sintheta;\r
31 this.rot[0][2] = 0.0;\r
32 this.rot[1][0] = sintheta;\r
33 this.rot[1][1] = costheta;\r
34 this.rot[1][2] = 0.0;\r
35 this.rot[2][0] = 0.0;\r
36 this.rot[2][1] = 0.0;\r
37 this.rot[2][2] = 1.0;\r
38 this.preMultiply (this.rot);\r
39 }if (axis == 'x') {\r
40 this.rot[0][0] = 1.0;\r
41 this.rot[0][1] = 0.0;\r
42 this.rot[0][2] = 0.0;\r
43 this.rot[1][0] = 0.0;\r
44 this.rot[1][1] = costheta;\r
45 this.rot[1][2] = sintheta;\r
46 this.rot[2][0] = 0.0;\r
47 this.rot[2][1] = -sintheta;\r
48 this.rot[2][2] = costheta;\r
49 this.preMultiply (this.rot);\r
50 }if (axis == 'y') {\r
51 this.rot[0][0] = costheta;\r
52 this.rot[0][1] = 0.0;\r
53 this.rot[0][2] = -sintheta;\r
54 this.rot[1][0] = 0.0;\r
55 this.rot[1][1] = 1.0;\r
56 this.rot[1][2] = 0.0;\r
57 this.rot[2][0] = sintheta;\r
58 this.rot[2][1] = 0.0;\r
59 this.rot[2][2] = costheta;\r
60 this.preMultiply (this.rot);\r
61 }}, "~N,~S");\r
62 Clazz.defineMethod (c$, "vectorMultiply", \r
63 function (vect) {\r
64 this.temp[0] = vect[0];\r
65 this.temp[1] = vect[1];\r
66 this.temp[2] = vect[2];\r
67 for (var i = 0; i < 3; i++) {\r
68 this.temp[i] = (this.matrix[i][0] * vect[0]) + (this.matrix[i][1] * vect[1]) + (this.matrix[i][2] * vect[2]);\r
69 }\r
70 vect[0] = this.temp[0];\r
71 vect[1] = this.temp[1];\r
72 vect[2] = this.temp[2];\r
73 return vect;\r
74 }, "~A");\r
75 Clazz.defineMethod (c$, "preMultiply", \r
76 function (mat) {\r
77 var tmp =  Clazz.newFloatArray (3, 3, 0);\r
78 for (var i = 0; i < 3; i++) {\r
79 for (var j = 0; j < 3; j++) {\r
80 tmp[i][j] = (mat[i][0] * this.matrix[0][j]) + (mat[i][1] * this.matrix[1][j]) + (mat[i][2] * this.matrix[2][j]);\r
81 }\r
82 }\r
83 for (var i = 0; i < 3; i++) {\r
84 for (var j = 0; j < 3; j++) {\r
85 this.matrix[i][j] = tmp[i][j];\r
86 }\r
87 }\r
88 }, "~A");\r
89 Clazz.defineMethod (c$, "postMultiply", \r
90 function (mat) {\r
91 var tmp =  Clazz.newFloatArray (3, 3, 0);\r
92 for (var i = 0; i < 3; i++) {\r
93 for (var j = 0; j < 3; j++) {\r
94 tmp[i][j] = (this.matrix[i][0] * mat[0][j]) + (this.matrix[i][1] * mat[1][j]) + (this.matrix[i][2] * mat[2][j]);\r
95 }\r
96 }\r
97 for (var i = 0; i < 3; i++) {\r
98 for (var j = 0; j < 3; j++) {\r
99 this.matrix[i][j] = tmp[i][j];\r
100 }\r
101 }\r
102 }, "~A");\r
103 Clazz.defineMethod (c$, "setIdentity", \r
104 function () {\r
105 this.matrix[0][0] = 1.0;\r
106 this.matrix[1][1] = 1.0;\r
107 this.matrix[2][2] = 1.0;\r
108 this.matrix[0][1] = 0.0;\r
109 this.matrix[0][2] = 0.0;\r
110 this.matrix[1][0] = 0.0;\r
111 this.matrix[1][2] = 0.0;\r
112 this.matrix[2][0] = 0.0;\r
113 this.matrix[2][1] = 0.0;\r
114 });\r