1 Clazz.declarePackage ("jalview.math");
\r
2 c$ = Clazz.decorateAsClass (function () {
\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
14 Clazz.defineMethod (c$, "addElement",
\r
15 function (i, j, value) {
\r
16 this.matrix[i][j] = value;
\r
18 Clazz.defineMethod (c$, "print",
\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
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
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
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
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
62 Clazz.defineMethod (c$, "vectorMultiply",
\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
70 vect[0] = this.temp[0];
\r
71 vect[1] = this.temp[1];
\r
72 vect[2] = this.temp[2];
\r
75 Clazz.defineMethod (c$, "preMultiply",
\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
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
89 Clazz.defineMethod (c$, "postMultiply",
\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
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
103 Clazz.defineMethod (c$, "setIdentity",
\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