New files
[jalview.git] / src / MCview / MCMatrix.java
diff --git a/src/MCview/MCMatrix.java b/src/MCview/MCMatrix.java
new file mode 100755 (executable)
index 0000000..4994573
--- /dev/null
@@ -0,0 +1,143 @@
+package MCview;\r
+\r
+public class MCMatrix {\r
+  float matrix[][];\r
+  float tmp[][];\r
+\r
+  float mycos;\r
+  float mysin;\r
+  float myconst = (float)(Math.PI/180);\r
+\r
+  public MCMatrix(int rows, int cols) {\r
+    matrix = new float[rows][cols];\r
+    tmp    = new float[rows][cols];\r
+  }\r
+\r
+  public void addElement(int i, int j, float value) {\r
+    matrix[i][j] = value;\r
+  }\r
+\r
+  public void print() {\r
+    System.out.println(matrix[0][0] + " " + matrix[0][1] + " " + matrix[0][2]);\r
+    System.out.println(matrix[1][0] + " " + matrix[1][1] + " " + matrix[1][2]);\r
+    System.out.println(matrix[2][0] + " " + matrix[2][1] + " " + matrix[2][2]);\r
+  }\r
+\r
+  public void rotatex(float degrees) {\r
+    mycos = (float)(Math.cos(degrees*myconst));\r
+    mysin = (float)(Math.sin(degrees*myconst));\r
+\r
+    tmp[0][0] = 1;\r
+    tmp[0][1] = 0;\r
+    tmp[0][2] = 0;\r
+    tmp[1][0] = 0;\r
+    tmp[1][1] = mycos;\r
+    tmp[1][2] = mysin;\r
+    tmp[2][0] = 0;\r
+    tmp[2][1] = -mysin;\r
+    tmp[2][2] = mycos;\r
+    preMultiply(tmp);\r
+  }\r
+\r
+  public void rotatez(float degrees) {\r
+    mycos = (float)(Math.cos(degrees*myconst));\r
+    mysin = (float)(Math.sin(degrees*myconst));\r
+\r
+    tmp[0][0] = mycos;\r
+    tmp[0][1] = -mysin;\r
+    tmp[0][2] = 0;\r
+    tmp[1][0] = mysin;\r
+    tmp[1][1] = mycos;\r
+    tmp[1][2] = 0;\r
+    tmp[2][0] = 0;\r
+    tmp[2][1] = 0;\r
+    tmp[2][2] = 1;\r
+\r
+    preMultiply(tmp);\r
+  }\r
+\r
+  public void rotatey(float degrees) {\r
+    mycos = (float)(Math.cos(degrees*myconst));\r
+    mysin = (float)(Math.sin(degrees*myconst));\r
+\r
+    tmp[0][0] = mycos;\r
+    tmp[0][1] = 0;\r
+    tmp[0][2] = -mysin;\r
+    tmp[1][0] = 0;\r
+    tmp[1][1] = 1;\r
+    tmp[1][2] = 0;\r
+    tmp[2][0] = mysin;\r
+    tmp[2][1] = 0;\r
+    tmp[2][2] = mycos;\r
+\r
+    preMultiply(tmp);\r
+  }\r
+\r
+  public float[] vectorMultiply(float[] vect) {\r
+    float temp[] = new float[3];\r
+\r
+    temp[0] = vect[0];\r
+    temp[1] = vect[1];\r
+    temp[2] = vect[2];\r
+\r
+    for (int i = 0; i < 3; i++) {\r
+      temp[i] = (float)matrix[i][0]*vect[0] + (float)matrix[i][1]*vect[1] +(float)matrix[i][2]*vect[2];\r
+    }\r
+\r
+    vect[0] = temp[0];\r
+    vect[1] = temp[1];\r
+    vect[2] = temp[2];\r
+\r
+    return vect;\r
+  }\r
+\r
+  public void preMultiply(float mat[][]) {\r
+    float tmp[][]  = new float[3][3];\r
+\r
+    for (int i = 0; i < 3 ; i++) {\r
+      for (int j = 0; j < 3; j++ ) {\r
+        tmp[i][j] = mat[i][0]*matrix[0][j] +\r
+                    mat[i][1]*matrix[1][j] +\r
+                    mat[i][2]*matrix[2][j];\r
+      }\r
+    }\r
+\r
+    for (int i = 0; i < 3 ; i++) {\r
+      for (int j = 0; j < 3; j++ ) {\r
+        matrix[i][j] = tmp[i][j];\r
+      }\r
+    }\r
+  }\r
+\r
+  public void postMultiply(float mat[][]) {\r
+    float tmp[][]  = new float[3][3];\r
+\r
+    for (int i = 0; i < 3 ; i++) {\r
+      for (int j = 0; j < 3; j++ ) {\r
+        tmp[i][j] = matrix[i][0]*mat[0][j] +\r
+                    matrix[i][1]*mat[1][j] +\r
+                    matrix[i][2]*mat[2][j];\r
+      }\r
+    }\r
+\r
+    for (int i = 0; i < 3 ; i++) {\r
+      for (int j = 0; j < 3; j++ ) {\r
+        matrix[i][j] = tmp[i][j];\r
+      }\r
+    }\r
+  }\r
+\r
+  public void setIdentity() {\r
+    matrix[0][0] = 1;\r
+    matrix[1][1] = 1;\r
+    matrix[2][2] = 1;\r
+    matrix[0][1] = 0;\r
+    matrix[0][2] = 0;\r
+    matrix[1][0] = 0;\r
+    matrix[1][2] = 0;\r
+    matrix[2][0] = 0;\r
+    matrix[2][1] = 0;\r
+  }\r
+}\r
+\r
+\r