4994573a0a83ec06bf2a7b624b434267e15c25d2
[jalview.git] / src / MCview / MCMatrix.java
1 package MCview;\r
2 \r
3 public class MCMatrix {\r
4   float matrix[][];\r
5   float tmp[][];\r
6 \r
7   float mycos;\r
8   float mysin;\r
9   float myconst = (float)(Math.PI/180);\r
10 \r
11   public MCMatrix(int rows, int cols) {\r
12     matrix = new float[rows][cols];\r
13     tmp    = new float[rows][cols];\r
14   }\r
15 \r
16   public void addElement(int i, int j, float value) {\r
17     matrix[i][j] = value;\r
18   }\r
19 \r
20   public void print() {\r
21     System.out.println(matrix[0][0] + " " + matrix[0][1] + " " + matrix[0][2]);\r
22     System.out.println(matrix[1][0] + " " + matrix[1][1] + " " + matrix[1][2]);\r
23     System.out.println(matrix[2][0] + " " + matrix[2][1] + " " + matrix[2][2]);\r
24   }\r
25 \r
26   public void rotatex(float degrees) {\r
27     mycos = (float)(Math.cos(degrees*myconst));\r
28     mysin = (float)(Math.sin(degrees*myconst));\r
29 \r
30     tmp[0][0] = 1;\r
31     tmp[0][1] = 0;\r
32     tmp[0][2] = 0;\r
33     tmp[1][0] = 0;\r
34     tmp[1][1] = mycos;\r
35     tmp[1][2] = mysin;\r
36     tmp[2][0] = 0;\r
37     tmp[2][1] = -mysin;\r
38     tmp[2][2] = mycos;\r
39     preMultiply(tmp);\r
40   }\r
41 \r
42   public void rotatez(float degrees) {\r
43     mycos = (float)(Math.cos(degrees*myconst));\r
44     mysin = (float)(Math.sin(degrees*myconst));\r
45 \r
46     tmp[0][0] = mycos;\r
47     tmp[0][1] = -mysin;\r
48     tmp[0][2] = 0;\r
49     tmp[1][0] = mysin;\r
50     tmp[1][1] = mycos;\r
51     tmp[1][2] = 0;\r
52     tmp[2][0] = 0;\r
53     tmp[2][1] = 0;\r
54     tmp[2][2] = 1;\r
55 \r
56     preMultiply(tmp);\r
57   }\r
58 \r
59   public void rotatey(float degrees) {\r
60     mycos = (float)(Math.cos(degrees*myconst));\r
61     mysin = (float)(Math.sin(degrees*myconst));\r
62 \r
63     tmp[0][0] = mycos;\r
64     tmp[0][1] = 0;\r
65     tmp[0][2] = -mysin;\r
66     tmp[1][0] = 0;\r
67     tmp[1][1] = 1;\r
68     tmp[1][2] = 0;\r
69     tmp[2][0] = mysin;\r
70     tmp[2][1] = 0;\r
71     tmp[2][2] = mycos;\r
72 \r
73     preMultiply(tmp);\r
74   }\r
75 \r
76   public float[] vectorMultiply(float[] vect) {\r
77     float temp[] = new float[3];\r
78 \r
79     temp[0] = vect[0];\r
80     temp[1] = vect[1];\r
81     temp[2] = vect[2];\r
82 \r
83     for (int i = 0; i < 3; i++) {\r
84       temp[i] = (float)matrix[i][0]*vect[0] + (float)matrix[i][1]*vect[1] +(float)matrix[i][2]*vect[2];\r
85     }\r
86 \r
87     vect[0] = temp[0];\r
88     vect[1] = temp[1];\r
89     vect[2] = temp[2];\r
90 \r
91     return vect;\r
92   }\r
93 \r
94   public void preMultiply(float mat[][]) {\r
95     float tmp[][]  = new float[3][3];\r
96 \r
97     for (int i = 0; i < 3 ; i++) {\r
98       for (int j = 0; j < 3; j++ ) {\r
99         tmp[i][j] = mat[i][0]*matrix[0][j] +\r
100                     mat[i][1]*matrix[1][j] +\r
101                     mat[i][2]*matrix[2][j];\r
102       }\r
103     }\r
104 \r
105     for (int i = 0; i < 3 ; i++) {\r
106       for (int j = 0; j < 3; j++ ) {\r
107         matrix[i][j] = tmp[i][j];\r
108       }\r
109     }\r
110   }\r
111 \r
112   public void postMultiply(float mat[][]) {\r
113     float tmp[][]  = new float[3][3];\r
114 \r
115     for (int i = 0; i < 3 ; i++) {\r
116       for (int j = 0; j < 3; j++ ) {\r
117         tmp[i][j] = matrix[i][0]*mat[0][j] +\r
118                     matrix[i][1]*mat[1][j] +\r
119                     matrix[i][2]*mat[2][j];\r
120       }\r
121     }\r
122 \r
123     for (int i = 0; i < 3 ; i++) {\r
124       for (int j = 0; j < 3; j++ ) {\r
125         matrix[i][j] = tmp[i][j];\r
126       }\r
127     }\r
128   }\r
129 \r
130   public void setIdentity() {\r
131     matrix[0][0] = 1;\r
132     matrix[1][1] = 1;\r
133     matrix[2][2] = 1;\r
134     matrix[0][1] = 0;\r
135     matrix[0][2] = 0;\r
136     matrix[1][0] = 0;\r
137     matrix[1][2] = 0;\r
138     matrix[2][0] = 0;\r
139     matrix[2][1] = 0;\r
140   }\r
141 }\r
142 \r
143 \r