home *** CD-ROM | disk | FTP | other *** search
/ Late Night VRML 2.0 with Java CD-ROM / code.zip / Ch15 / utility / Matrix.java < prev    next >
Encoding:
Java Source  |  1997-02-05  |  1.9 KB  |  67 lines

  1. // Rotation Matrix class
  2.  
  3. // Written by Bernie Roehl, November 1996
  4.  
  5. package utility;
  6.  
  7. public class Matrix {
  8.     protected float[][] values;
  9.  
  10.     public float getElement(int row, int column) { return values[row][column]; }
  11.  
  12.     public Matrix() {
  13.         values = new float[3][3];
  14.         identity();
  15.     }
  16.  
  17. public void dump() {
  18.     for (int i = 0; i < 3; ++i) {
  19.         for (int j = 0; j < 3; ++j)
  20.             System.out.print("\t" + values[i][j]);
  21.     System.out.println();
  22.     }
  23. }
  24.  
  25.     public void identity() {
  26.         for (int i = 0; i < 3; ++i)
  27.             for (int j = 0; j < 3; ++j)
  28.                 values[i][j] = (i == j) ? 1 : 0;
  29.     }
  30.  
  31.     public Matrix multiply(Matrix mat) {
  32.         Matrix result = new Matrix();
  33.         for (int i = 0; i < 3; ++i)
  34.             for (int j = 0; j < 3; ++j) {
  35.                 result.values[i][j] = 0;
  36.                 for (int k = 0; k < 3; ++k)
  37.                     result.values[i][j] += values[i][k] * mat.values[k][j];
  38.             }
  39.         return result;
  40.     }
  41.  
  42.    public static Matrix xrot(float angle) {
  43.        Matrix result = new Matrix();
  44.        float a = angle * (float) Math.PI / 180;
  45.        result.values[1][1] = result.values[2][2] = (float) Math.cos(a);
  46.        result.values[1][2] = -(result.values[2][1] = (float) Math.sin(a));
  47.        return result;
  48.    }
  49.  
  50.    public static Matrix yrot(float angle) {
  51.        Matrix result = new Matrix();
  52.        float a = angle * (float) Math.PI / 180;
  53.        result.values[0][0] = result.values[2][2] = (float) Math.cos(a);
  54.        result.values[0][2] = -(result.values[2][0] = (float) Math.sin(a));
  55.        return result;
  56.    }
  57.  
  58.    public static Matrix zrot(float angle) {
  59.        Matrix result = new Matrix();
  60.        float a = angle * (float) Math.PI / 180;
  61.        result.values[0][0] = result.values[1][1] = (float) Math.cos(a);
  62.        result.values[1][0] = -(result.values[0][1] = (float) Math.sin(a));
  63.        return result;
  64.    }
  65.  
  66. }
  67.