X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fmath%2FRotatableMatrix.java;h=eff8dea1ee72d3c9c7d8359a07229c0fdd810bc1;hb=def10fb2252c67e8256ec1fddc6605e34d760c63;hp=ba903703c5f2c1a97370e5ede301651f2132d0b4;hpb=174230b4233d9ce80f94527768d2cd2f76da11ab;p=jalview.git diff --git a/src/jalview/math/RotatableMatrix.java b/src/jalview/math/RotatableMatrix.java index ba90370..eff8dea 100755 --- a/src/jalview/math/RotatableMatrix.java +++ b/src/jalview/math/RotatableMatrix.java @@ -1,24 +1,23 @@ /* -* Jalview - A Sequence Alignment Editor and Viewer -* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -*/ + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ package jalview.math; - /** * DOCUMENT ME! * @@ -27,306 +26,306 @@ package jalview.math; */ public class RotatableMatrix { - float[][] matrix; - float[] temp; - float[][] rot; - - /** - * Creates a new RotatableMatrix object. - * - * @param rows DOCUMENT ME! - * @param cols DOCUMENT ME! - */ - public RotatableMatrix(int rows, int cols) - { - matrix = new float[rows][cols]; - - temp = new float[3]; - - rot = new float[3][3]; - } - - /** - * DOCUMENT ME! - * - * @param i DOCUMENT ME! - * @param j DOCUMENT ME! - * @param value DOCUMENT ME! - */ - public void addElement(int i, int j, float value) - { - matrix[i][j] = value; - } - - /** - * DOCUMENT ME! - */ - public void print() + float[][] matrix; + float[] temp; + float[][] rot; + + /** + * Creates a new RotatableMatrix object. + * + * @param rows DOCUMENT ME! + * @param cols DOCUMENT ME! + */ + public RotatableMatrix(int rows, int cols) + { + matrix = new float[rows][cols]; + + temp = new float[3]; + + rot = new float[3][3]; + } + + /** + * DOCUMENT ME! + * + * @param i DOCUMENT ME! + * @param j DOCUMENT ME! + * @param value DOCUMENT ME! + */ + public void addElement(int i, int j, float value) + { + matrix[i][j] = value; + } + + /** + * DOCUMENT ME! + */ + public void print() + { + System.out.println(matrix[0][0] + " " + matrix[0][1] + " " + + matrix[0][2]); + + System.out.println(matrix[1][0] + " " + matrix[1][1] + " " + + matrix[1][2]); + + System.out.println(matrix[2][0] + " " + matrix[2][1] + " " + + matrix[2][2]); + } + + /** + * DOCUMENT ME! + * + * @param degrees DOCUMENT ME! + * @param axis DOCUMENT ME! + */ + public void rotate(float degrees, char axis) + { + float costheta = (float) Math.cos( (degrees * Math.PI) / (float) 180.0); + + float sintheta = (float) Math.sin( (degrees * Math.PI) / (float) 180.0); + + if (axis == 'z') { - System.out.println(matrix[0][0] + " " + matrix[0][1] + " " + - matrix[0][2]); - - System.out.println(matrix[1][0] + " " + matrix[1][1] + " " + - matrix[1][2]); - - System.out.println(matrix[2][0] + " " + matrix[2][1] + " " + - matrix[2][2]); - } + rot[0][0] = (float) costheta; - /** - * DOCUMENT ME! - * - * @param degrees DOCUMENT ME! - * @param axis DOCUMENT ME! - */ - public void rotate(float degrees, char axis) - { - float costheta = (float) Math.cos((degrees * Math.PI) / (float) 180.0); + rot[0][1] = (float) - sintheta; - float sintheta = (float) Math.sin((degrees * Math.PI) / (float) 180.0); + rot[0][2] = (float) 0.0; - if (axis == 'z') - { - rot[0][0] = (float) costheta; + rot[1][0] = (float) sintheta; - rot[0][1] = (float) -sintheta; + rot[1][1] = (float) costheta; - rot[0][2] = (float) 0.0; + rot[1][2] = (float) 0.0; - rot[1][0] = (float) sintheta; + rot[2][0] = (float) 0.0; - rot[1][1] = (float) costheta; + rot[2][1] = (float) 0.0; - rot[1][2] = (float) 0.0; + rot[2][2] = (float) 1.0; - rot[2][0] = (float) 0.0; + preMultiply(rot); + } - rot[2][1] = (float) 0.0; + if (axis == 'x') + { + rot[0][0] = (float) 1.0; - rot[2][2] = (float) 1.0; + rot[0][1] = (float) 0.0; - preMultiply(rot); - } + rot[0][2] = (float) 0.0; - if (axis == 'x') - { - rot[0][0] = (float) 1.0; + rot[1][0] = (float) 0.0; - rot[0][1] = (float) 0.0; + rot[1][1] = (float) costheta; - rot[0][2] = (float) 0.0; + rot[1][2] = (float) sintheta; - rot[1][0] = (float) 0.0; + rot[2][0] = (float) 0.0; - rot[1][1] = (float) costheta; + rot[2][1] = (float) - sintheta; - rot[1][2] = (float) sintheta; + rot[2][2] = (float) costheta; - rot[2][0] = (float) 0.0; + preMultiply(rot); + } - rot[2][1] = (float) -sintheta; + if (axis == 'y') + { + rot[0][0] = (float) costheta; - rot[2][2] = (float) costheta; + rot[0][1] = (float) 0.0; - preMultiply(rot); - } + rot[0][2] = (float) - sintheta; - if (axis == 'y') - { - rot[0][0] = (float) costheta; + rot[1][0] = (float) 0.0; - rot[0][1] = (float) 0.0; + rot[1][1] = (float) 1.0; - rot[0][2] = (float) -sintheta; + rot[1][2] = (float) 0.0; - rot[1][0] = (float) 0.0; + rot[2][0] = (float) sintheta; - rot[1][1] = (float) 1.0; + rot[2][1] = (float) 0.0; - rot[1][2] = (float) 0.0; + rot[2][2] = (float) costheta; - rot[2][0] = (float) sintheta; + preMultiply(rot); + } + } - rot[2][1] = (float) 0.0; + /** + * DOCUMENT ME! + * + * @param vect DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public float[] vectorMultiply(float[] vect) + { + temp[0] = vect[0]; - rot[2][2] = (float) costheta; + temp[1] = vect[1]; - preMultiply(rot); - } - } + temp[2] = vect[2]; - /** - * DOCUMENT ME! - * - * @param vect DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public float[] vectorMultiply(float[] vect) + for (int i = 0; i < 3; i++) { - temp[0] = vect[0]; - - temp[1] = vect[1]; + temp[i] = (matrix[i][0] * vect[0]) + (matrix[i][1] * vect[1]) + + (matrix[i][2] * vect[2]); + } - temp[2] = vect[2]; + vect[0] = temp[0]; - for (int i = 0; i < 3; i++) - { - temp[i] = (matrix[i][0] * vect[0]) + (matrix[i][1] * vect[1]) + - (matrix[i][2] * vect[2]); - } + vect[1] = temp[1]; - vect[0] = temp[0]; + vect[2] = temp[2]; - vect[1] = temp[1]; + return vect; + } - vect[2] = temp[2]; + /** + * DOCUMENT ME! + * + * @param mat DOCUMENT ME! + */ + public void preMultiply(float[][] mat) + { + float[][] tmp = new float[3][3]; - return vect; + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + tmp[i][j] = (mat[i][0] * matrix[0][j]) + + (mat[i][1] * matrix[1][j]) + (mat[i][2] * matrix[2][j]); + } } - /** - * DOCUMENT ME! - * - * @param mat DOCUMENT ME! - */ - public void preMultiply(float[][] mat) + for (int i = 0; i < 3; i++) { - float[][] tmp = new float[3][3]; - - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - { - tmp[i][j] = (mat[i][0] * matrix[0][j]) + - (mat[i][1] * matrix[1][j]) + (mat[i][2] * matrix[2][j]); - } - } - - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - { - matrix[i][j] = tmp[i][j]; - } - } + for (int j = 0; j < 3; j++) + { + matrix[i][j] = tmp[i][j]; + } } - - /** - * DOCUMENT ME! - * - * @param mat DOCUMENT ME! - */ - public void postMultiply(float[][] mat) + } + + /** + * DOCUMENT ME! + * + * @param mat DOCUMENT ME! + */ + public void postMultiply(float[][] mat) + { + float[][] tmp = new float[3][3]; + + for (int i = 0; i < 3; i++) { - float[][] tmp = new float[3][3]; - - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - { - tmp[i][j] = (matrix[i][0] * mat[0][j]) + - (matrix[i][1] * mat[1][j]) + (matrix[i][2] * mat[2][j]); - } - } - - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < 3; j++) - { - matrix[i][j] = tmp[i][j]; - } - } + for (int j = 0; j < 3; j++) + { + tmp[i][j] = (matrix[i][0] * mat[0][j]) + + (matrix[i][1] * mat[1][j]) + (matrix[i][2] * mat[2][j]); + } } - /** - * DOCUMENT ME! - * - * @param args DOCUMENT ME! - */ - public static void main(String[] args) + for (int i = 0; i < 3; i++) { - RotatableMatrix m = new RotatableMatrix(3, 3); + for (int j = 0; j < 3; j++) + { + matrix[i][j] = tmp[i][j]; + } + } + } - m.addElement(0, 0, 1); + /** + * DOCUMENT ME! + * + * @param args DOCUMENT ME! + */ + public static void main(String[] args) + { + RotatableMatrix m = new RotatableMatrix(3, 3); - m.addElement(0, 1, 0); + m.addElement(0, 0, 1); - m.addElement(0, 2, 0); + m.addElement(0, 1, 0); - m.addElement(1, 0, 0); + m.addElement(0, 2, 0); - m.addElement(1, 1, 2); + m.addElement(1, 0, 0); - m.addElement(1, 2, 0); + m.addElement(1, 1, 2); - m.addElement(2, 0, 0); + m.addElement(1, 2, 0); - m.addElement(2, 1, 0); + m.addElement(2, 0, 0); - m.addElement(2, 2, 1); + m.addElement(2, 1, 0); - m.print(); + m.addElement(2, 2, 1); - RotatableMatrix n = new RotatableMatrix(3, 3); + m.print(); - n.addElement(0, 0, 2); + RotatableMatrix n = new RotatableMatrix(3, 3); - n.addElement(0, 1, 1); + n.addElement(0, 0, 2); - n.addElement(0, 2, 1); + n.addElement(0, 1, 1); - n.addElement(1, 0, 2); + n.addElement(0, 2, 1); - n.addElement(1, 1, 1); + n.addElement(1, 0, 2); - n.addElement(1, 2, 1); + n.addElement(1, 1, 1); - n.addElement(2, 0, 2); + n.addElement(1, 2, 1); - n.addElement(2, 1, 1); + n.addElement(2, 0, 2); - n.addElement(2, 2, 1); + n.addElement(2, 1, 1); - n.print(); + n.addElement(2, 2, 1); - //m.postMultiply(n.matrix); - //m.print(); - // m.rotate(45,'z',new RotatableMatrix(3,3)); - float[] vect = new float[3]; + n.print(); - vect[0] = 2; + //m.postMultiply(n.matrix); + //m.print(); + // m.rotate(45,'z',new RotatableMatrix(3,3)); + float[] vect = new float[3]; - vect[1] = 4; + vect[0] = 2; - vect[2] = 6; + vect[1] = 4; - vect = m.vectorMultiply(vect); + vect[2] = 6; - System.out.println(vect[0] + " " + vect[1] + " " + vect[2]); - } + vect = m.vectorMultiply(vect); - /** - * DOCUMENT ME! - */ - public void setIdentity() - { - matrix[0][0] = (float) 1.0; + System.out.println(vect[0] + " " + vect[1] + " " + vect[2]); + } - matrix[1][1] = (float) 1.0; + /** + * DOCUMENT ME! + */ + public void setIdentity() + { + matrix[0][0] = (float) 1.0; - matrix[2][2] = (float) 1.0; + matrix[1][1] = (float) 1.0; - matrix[0][1] = (float) 0.0; + matrix[2][2] = (float) 1.0; - matrix[0][2] = (float) 0.0; + matrix[0][1] = (float) 0.0; - matrix[1][0] = (float) 0.0; + matrix[0][2] = (float) 0.0; - matrix[1][2] = (float) 0.0; + matrix[1][0] = (float) 0.0; - matrix[2][0] = (float) 0.0; + matrix[1][2] = (float) 0.0; - matrix[2][1] = (float) 0.0; - } + matrix[2][0] = (float) 0.0; + + matrix[2][1] = (float) 0.0; + } }