removes org.json from srcjar
[jalview.git] / srcjar / javajs / util / M4.java
diff --git a/srcjar/javajs/util/M4.java b/srcjar/javajs/util/M4.java
deleted file mode 100644 (file)
index 58bd355..0000000
+++ /dev/null
@@ -1,942 +0,0 @@
-/*
-   Copyright (C) 1997,1998,1999
-   Kenji Hiranabe, Eiwa System Management, Inc.
-
-   This program is free software.
-   Implemented by Kenji Hiranabe(hiranabe@esm.co.jp),
-   conforming to the Java(TM) 3D API specification by Sun Microsystems.
-
-   Permission to use, copy, modify, distribute and sell this software
-   and its documentation for any purpose is hereby granted without fee,
-   provided that the above copyright notice appear in all copies and
-   that both that copyright notice and this permission notice appear
-   in supporting documentation. Kenji Hiranabe and Eiwa System Management,Inc.
-   makes no representations about the suitability of this software for any
-   purpose.  It is provided "AS IS" with NO WARRANTY.
-*/
-package javajs.util;
-
-/**
- * A single precision floating point 4 by 4 matrix.
- * 
- * @author Kenji hiranabe
- * 
- *         additions by Bob Hanson hansonr@stolaf.edu 9/30/2012 for unique
- *         constructor and method names for the optimization of compiled
- *         JavaScript using Java2Script
- */
-public class M4 extends M34 {
-
-  /**
-   * The fourth element of the first row.
-   */
-  public float m03;
-
-  /**
-   * The fourth element of the second row.
-   */
-  public float m13;
-
-  /**
-   * The fourth element of the third row.
-   */
-  public float m23;
-
-  /**
-   * The first element of the fourth row.
-   */
-  public float m30;
-
-  /**
-   * The second element of the fourth row.
-   */
-  public float m31;
-
-  /**
-   * The third element of the fourth row.
-   */
-  public float m32;
-
-  /**
-   * The fourth element of the fourth row.
-   */
-  public float m33 = 0;
-
-  /**
-   * all zeros
-   */
-  public M4() {
-  }
-  /**
-   * Constructs and initializes a Matrix4f from the specified 16 element array.
-   * this.m00 =v[0], this.m01=v[1], etc.
-   * 
-   * @param v
-   *        the array of length 16 containing in order
-   * @return m
-   */
-  public static M4 newA16(float[] v) {
-    M4 m = new M4();
-    m.m00 = v[0];
-    m.m01 = v[1];
-    m.m02 = v[2];
-    m.m03 = v[3];
-
-    m.m10 = v[4];
-    m.m11 = v[5];
-    m.m12 = v[6];
-    m.m13 = v[7];
-
-    m.m20 = v[8];
-    m.m21 = v[9];
-    m.m22 = v[10];
-    m.m23 = v[11];
-
-    m.m30 = v[12];
-    m.m31 = v[13];
-    m.m32 = v[14];
-    m.m33 = v[15];
-
-    return m;
-  }
-
-  /**
-   * Constructs a new matrix with the same values as the Matrix4f parameter.
-   * 
-   * @param m1
-   *        the source matrix
-   * @return m
-   */
-  public static M4 newM4(M4 m1) {
-    M4 m = new M4();
-    if (m1 == null) {
-      m.setIdentity();
-      return m;
-    }
-    m.setToM3(m1);
-    m.m03 = m1.m03;
-    m.m13 = m1.m13;
-    m.m23 = m1.m23;
-    m.m30 = m1.m30;
-    m.m31 = m1.m31;
-    m.m32 = m1.m32;
-    m.m33 = m1.m33;
-    return m;
-  }
-
-  /**
-   * Constructs and initializes a Matrix4f from the rotation matrix and
-   * translation.
-   * 
-   * @param m1
-   *        The rotation matrix representing the rotational components
-   * @param t
-   *        The translational components of the matrix
-   * @return m
-   */
-  public static M4 newMV(M3 m1, T3 t) {
-    M4 m = new M4();
-    m.setMV(m1, t);
-    return m;
-  }
-
-  /**
-   * Sets this matrix to all zeros.
-   */
-  public void setZero() {
-    clear33();
-    m03 = m13 = m23 = m30 = m31 = m32 = m33 = 0.0f;
-  }
-
-  /**
-   * Sets this Matrix4f to identity.
-   */
-  public void setIdentity() {
-    setZero();
-    m00 = m11 = m22 = m33 = 1.0f;
-  }
-
-  /**
-   * Sets the value of this matrix to a copy of the passed matrix m1.
-   * 
-   * @param m1
-   *        the matrix to be copied
-   * @return this
-   */
-  public M4 setM4(M4 m1) {
-    setM33(m1);
-    m03 = m1.m03;
-    m13 = m1.m13;
-    m23 = m1.m23;
-    m30 = m1.m30;
-    m31 = m1.m31;
-    m32 = m1.m32;
-    m33 = m1.m33;
-    return this;
-  }
-
-  /**
-   * Initializes a Matrix4f from the rotation matrix and translation.
-   * 
-   * @param m1
-   *        The rotation matrix representing the rotational components
-   * @param t
-   *        The translational components of the matrix
-   */
-  public void setMV(M3 m1, T3 t) {
-    setM33(m1);
-    setTranslation(t);
-    m33 = 1;
-  }
-
-  /**
-   * Sets the rotational component (upper 3x3) of this matrix to the matrix
-   * values in the single precision Matrix3f argument; the other elements of
-   * this matrix are initialized as if this were an identity matrix (ie, affine
-   * matrix with no translational component).
-   * 
-   * @param m1
-   *        the 3x3 matrix
-   */
-  public void setToM3(M34 m1) {
-    setM33(m1);
-    m03 = m13 = m23 = m30 = m31 = m32 = 0.0f;
-    m33 = 1.0f;
-  }
-
-  /**
-   * Sets the rotational component (upper 3x3) of this matrix 
-   * to a rotation given by an axis angle
-   * 
-   * @param a
-   *        the axis and angle to be converted
-   */
-  public void setToAA(A4 a) {
-    setIdentity();
-    setAA33(a);
-  }
-
-  /**
-   * Sets the values in this Matrix4f equal to the row-major array parameter
-   * (ie, the first four elements of the array will be copied into the first row
-   * of this matrix, etc.).
-   * 
-   * @param m
-   */
-  public void setA(float m[]) {
-    m00 = m[0];
-    m01 = m[1];
-    m02 = m[2];
-    m03 = m[3];
-    m10 = m[4];
-    m11 = m[5];
-    m12 = m[6];
-    m13 = m[7];
-    m20 = m[8];
-    m21 = m[9];
-    m22 = m[10];
-    m23 = m[11];
-    m30 = m[12];
-    m31 = m[13];
-    m32 = m[14];
-    m33 = m[15];
-  }
-
-  /**
-   * Modifies the translational components of this matrix to the values of the
-   * Vector3f argument; the other values of this matrix are not modified.
-   * 
-   * @param trans
-   *        the translational component
-   */
-  public void setTranslation(T3 trans) {
-    m03 = trans.x;
-    m13 = trans.y;
-    m23 = trans.z;
-  }
-
-  /**
-   * Sets the specified element of this matrix4f to the value provided.
-   * 
-   * @param row
-   *        the row number to be modified (zero indexed)
-   * @param col
-   *        the column number to be modified (zero indexed)
-   * @param v
-   *        the new value
-   */
-  public void setElement(int row, int col, float v) {
-    if (row < 3 && col < 3) {
-      set33(row, col, v);
-      return;
-    }
-    if (row > 3 || col > 3)
-      err();
-    switch (row) {
-    case 0:
-      m03 = v;
-      return;
-    case 1:
-      m13 = v;
-      return;
-    case 2:
-      m23 = v;
-      return;
-    }
-    switch (col) {
-    case 0:
-      m30 = v;
-      return;
-    case 1:
-      m31 = v;
-      return;
-    case 2:
-      m32 = v;
-      return;
-    case 3:
-      m33 = v;
-      return;
-    }
-  }
-
-  /**
-   * Retrieves the value at the specified row and column of this matrix.
-   * 
-   * @param row
-   *        the row number to be retrieved (zero indexed)
-   * @param col
-   *        the column number to be retrieved (zero indexed)
-   * @return the value at the indexed element
-   */
-  public float getElement(int row, int col) {
-    if (row < 3 && col < 3)
-      return get33(row, col);
-    if (row > 3 || col > 3) {
-      err();
-      return 0;
-    }
-    switch (row) {
-    case 0:
-      return m03;
-    case 1:
-      return m13;
-    case 2:
-      return m23;
-    default:
-      switch (col) {
-      case 0:
-        return m30;
-      case 1:
-        return m31;
-      case 2:
-        return m32;
-      default:
-        return m33;
-      }
-    }
-  }
-
-  /**
-   * Retrieves the translational components of this matrix.
-   * 
-   * @param trans
-   *        the vector that will receive the translational component
-   */
-  public void getTranslation(T3 trans) {
-    trans.x = m03;
-    trans.y = m13;
-    trans.z = m23;
-  }
-
-  /**
-   * Gets the upper 3x3 values of this matrix and places them into the matrix
-   * m1.
-   * 
-   * @param m1
-   *        The matrix that will hold the values
-   */
-  public void getRotationScale(M3 m1) {
-    m1.m00 = m00;
-    m1.m01 = m01;
-    m1.m02 = m02;
-    m1.m10 = m10;
-    m1.m11 = m11;
-    m1.m12 = m12;
-    m1.m20 = m20;
-    m1.m21 = m21;
-    m1.m22 = m22;
-  }
-
-  /**
-   * Replaces the upper 3x3 matrix values of this matrix with the values in the
-   * matrix m1.
-   * 
-   * @param m1
-   *        The matrix that will be the new upper 3x3
-   */
-  public void setRotationScale(M3 m1) {
-    m00 = m1.m00;
-    m01 = m1.m01;
-    m02 = m1.m02;
-    m10 = m1.m10;
-    m11 = m1.m11;
-    m12 = m1.m12;
-    m20 = m1.m20;
-    m21 = m1.m21;
-    m22 = m1.m22;
-  }
-
-  /**
-   * Sets the specified row of this matrix4f to the four values provided.
-   * 
-   * @param row
-   *        the row number to be modified (zero indexed)
-   * @param v
-   *        the replacement row
-   */
-  public void setRowA(int row, float v[]) {
-    if (row < 3)
-      setRow33(row, v);
-    switch (row) {
-    case 0:
-      m03 = v[3];
-      return;
-    case 1:
-      m13 = v[3];
-      return;
-    case 2:
-      m23 = v[3];
-      return;
-    case 3:
-      m30 = v[0];
-      m31 = v[1];
-      m32 = v[2];
-      m33 = v[3];
-      return;
-    }
-    err();
-  }
-
-  /**
-   * Copies the matrix values in the specified row into the array parameter.
-   * 
-   * @param row
-   *        the matrix row
-   * @param v
-   *        The array into which the matrix row values will be copied
-   */
-  @Override
-  public void getRow(int row, float v[]) {
-    if (row < 3)
-      getRow33(row, v);
-    switch (row) {
-    case 0:
-      v[3] = m03;
-      return;
-    case 1:
-      v[3] = m13;
-      return;
-    case 2:
-      v[3] = m23;
-      return;
-    case 3:
-      v[0] = m30;
-      v[1] = m31;
-      v[2] = m32;
-      v[3] = m33;
-      return;
-    }
-    err();
-  }
-
-  /**
-   * Sets the specified column of this matrix4f to the four values provided.
-   * 
-   * @param column
-   *        the column number to be modified (zero indexed)
-   * @param x
-   *        the first row element
-   * @param y
-   *        the second row element
-   * @param z
-   *        the third row element
-   * @param w
-   *        the fourth row element
-   */
-  public void setColumn4(int column, float x, float y, float z, float w) {
-    if (column == 0) {
-      m00 = x;
-      m10 = y;
-      m20 = z;
-      m30 = w;
-    } else if (column == 1) {
-      m01 = x;
-      m11 = y;
-      m21 = z;
-      m31 = w;
-    } else if (column == 2) {
-      m02 = x;
-      m12 = y;
-      m22 = z;
-      m32 = w;
-    } else if (column == 3) {
-      m03 = x;
-      m13 = y;
-      m23 = z;
-      m33 = w;
-    } else {
-      err();
-    }
-  }
-
-  /**
-   * Sets the specified column of this matrix4f to the four values provided.
-   * 
-   * @param column
-   *        the column number to be modified (zero indexed)
-   * @param v
-   *        the replacement column
-   */
-  public void setColumnA(int column, float v[]) {
-    if (column < 3)
-      setColumn33(column, v);
-    switch (column) {
-    case 0:
-      m30 = v[3];
-      return;
-    case 1:
-      m31 = v[3];
-      return;
-    case 2:
-      m32 = v[3];
-      return;
-    case 3:
-      m03 = v[0];
-      m13 = v[1];
-      m23 = v[2];
-      m33 = v[3];
-      return;
-    default:
-      err();
-    }
-  }
-
-  /**
-   * Copies the matrix values in the specified column into the array parameter.
-   * 
-   * @param column
-   *        the matrix column
-   * @param v
-   *        The array into which the matrix column values will be copied
-   */
-  public void getColumn(int column, float v[]) {
-    if (column < 3)
-      getColumn33(column, v);
-    switch (column) {
-    case 0:
-      v[3] = m30;
-      return;
-    case 1:
-      v[3] = m31;
-      return;
-    case 2:
-      v[3] = m32;
-      return;
-    case 3:
-      v[0] = m03;
-      v[1] = m13;
-      v[2] = m23;
-      v[3] = m33;
-      return;
-    default:
-      err();
-    }
-  }
-
-  /**
-   * Sets the value of this matrix to the matrix difference of itself and matrix
-   * m1 (this = this - m1).
-   * 
-   * @param m1
-   *        the other matrix
-   */
-  public void sub(M4 m1) {
-    sub33(m1);
-    m03 -= m1.m03;
-    m13 -= m1.m13;
-    m23 -= m1.m23;
-    m30 -= m1.m30;
-    m31 -= m1.m31;
-    m32 -= m1.m32;
-    m33 -= m1.m33;
-  }
-
-  /**
-   * Sets the value of this matrix to its transpose.
-   */
-  public void transpose() {
-    transpose33();
-    float tmp = m03;
-    m03 = m30;
-    m30 = tmp;
-
-    tmp = m13;
-    m13 = m31;
-    m31 = tmp;
-
-    tmp = m23;
-    m23 = m32;
-    m32 = tmp;
-  }
-
-  /**
-   * Sets the value of this matrix to its inverse.
-   * @return this
-   */
-  public M4 invert() {
-    float s = determinant4();
-    if (s == 0.0)
-      return this;
-    s = 1 / s;
-    // alias-safe way.
-    // less *,+,- calculation than expanded expression.
-    set(m11 * (m22 * m33 - m23 * m32) + m12 * (m23 * m31 - m21 * m33) + m13
-        * (m21 * m32 - m22 * m31), m21 * (m02 * m33 - m03 * m32) + m22
-        * (m03 * m31 - m01 * m33) + m23 * (m01 * m32 - m02 * m31), m31
-        * (m02 * m13 - m03 * m12) + m32 * (m03 * m11 - m01 * m13) + m33
-        * (m01 * m12 - m02 * m11), m01 * (m13 * m22 - m12 * m23) + m02
-        * (m11 * m23 - m13 * m21) + m03 * (m12 * m21 - m11 * m22),
-
-    m12 * (m20 * m33 - m23 * m30) + m13 * (m22 * m30 - m20 * m32) + m10
-        * (m23 * m32 - m22 * m33), m22 * (m00 * m33 - m03 * m30) + m23
-        * (m02 * m30 - m00 * m32) + m20 * (m03 * m32 - m02 * m33), m32
-        * (m00 * m13 - m03 * m10) + m33 * (m02 * m10 - m00 * m12) + m30
-        * (m03 * m12 - m02 * m13), m02 * (m13 * m20 - m10 * m23) + m03
-        * (m10 * m22 - m12 * m20) + m00 * (m12 * m23 - m13 * m22),
-
-    m13 * (m20 * m31 - m21 * m30) + m10 * (m21 * m33 - m23 * m31) + m11
-        * (m23 * m30 - m20 * m33), m23 * (m00 * m31 - m01 * m30) + m20
-        * (m01 * m33 - m03 * m31) + m21 * (m03 * m30 - m00 * m33), m33
-        * (m00 * m11 - m01 * m10) + m30 * (m01 * m13 - m03 * m11) + m31
-        * (m03 * m10 - m00 * m13), m03 * (m11 * m20 - m10 * m21) + m00
-        * (m13 * m21 - m11 * m23) + m01 * (m10 * m23 - m13 * m20),
-
-    m10 * (m22 * m31 - m21 * m32) + m11 * (m20 * m32 - m22 * m30) + m12
-        * (m21 * m30 - m20 * m31), m20 * (m02 * m31 - m01 * m32) + m21
-        * (m00 * m32 - m02 * m30) + m22 * (m01 * m30 - m00 * m31), m30
-        * (m02 * m11 - m01 * m12) + m31 * (m00 * m12 - m02 * m10) + m32
-        * (m01 * m10 - m00 * m11), m00 * (m11 * m22 - m12 * m21) + m01
-        * (m12 * m20 - m10 * m22) + m02 * (m10 * m21 - m11 * m20));
-    scale(s);
-    return this;
-  }
-
-  /**
-   * Sets 16 values
-   * 
-   * @param m00
-   * @param m01
-   * @param m02
-   * @param m03
-   * @param m10
-   * @param m11
-   * @param m12
-   * @param m13
-   * @param m20
-   * @param m21
-   * @param m22
-   * @param m23
-   * @param m30
-   * @param m31
-   * @param m32
-   * @param m33
-   */
-  private void set(float m00, float m01, float m02, float m03, float m10,
-                   float m11, float m12, float m13, float m20, float m21,
-                   float m22, float m23, float m30, float m31, float m32,
-                   float m33) {
-    this.m00 = m00;
-    this.m01 = m01;
-    this.m02 = m02;
-    this.m03 = m03;
-    this.m10 = m10;
-    this.m11 = m11;
-    this.m12 = m12;
-    this.m13 = m13;
-    this.m20 = m20;
-    this.m21 = m21;
-    this.m22 = m22;
-    this.m23 = m23;
-    this.m30 = m30;
-    this.m31 = m31;
-    this.m32 = m32;
-    this.m33 = m33;
-  }
-  /**
-   * Computes the determinant of this matrix.
-   * 
-   * @return the determinant of the matrix
-   */
-  public float determinant4() {
-    // less *,+,- calculation than expanded expression.
-    return (m00 * m11 - m01 * m10) * (m22 * m33 - m23 * m32)
-        - (m00 * m12 - m02 * m10) * (m21 * m33 - m23 * m31)
-        + (m00 * m13 - m03 * m10) * (m21 * m32 - m22 * m31)
-        + (m01 * m12 - m02 * m11) * (m20 * m33 - m23 * m30)
-        - (m01 * m13 - m03 * m11) * (m20 * m32 - m22 * m30)
-        + (m02 * m13 - m03 * m12) * (m20 * m31 - m21 * m30);
-
-  }
-
-  /**
-   * Multiplies each element of this matrix by a scalar.
-   * 
-   * @param scalar
-   *        The scalar multiplier.
-   */
-  public void scale(float scalar) {
-    mul33(scalar);
-    m03 *= scalar;
-    m13 *= scalar;
-    m23 *= scalar;
-    m30 *= scalar;
-    m31 *= scalar;
-    m32 *= scalar;
-    m33 *= scalar;
-  }
-
-  /**
-   * Sets the value of this matrix to the result of multiplying itself with
-   * matrix m1.
-   * 
-   * @param m1
-   *        the other matrix
-   */
-  public void mul(M4 m1) {
-    mul2(this, m1);
-  }
-
-  /**
-   * Sets the value of this matrix to the result of multiplying the two argument
-   * matrices together.
-   * 
-   * @param m1
-   *        the first matrix
-   * @param m2
-   *        the second matrix
-   */
-  public void mul2(M4 m1, M4 m2) {
-    // alias-safe way.
-    set(m1.m00 * m2.m00 + m1.m01 * m2.m10 + m1.m02 * m2.m20 + m1.m03 * m2.m30,
-        m1.m00 * m2.m01 + m1.m01 * m2.m11 + m1.m02 * m2.m21 + m1.m03 * m2.m31,
-        m1.m00 * m2.m02 + m1.m01 * m2.m12 + m1.m02 * m2.m22 + m1.m03 * m2.m32,
-        m1.m00 * m2.m03 + m1.m01 * m2.m13 + m1.m02 * m2.m23 + m1.m03 * m2.m33,
-
-        m1.m10 * m2.m00 + m1.m11 * m2.m10 + m1.m12 * m2.m20 + m1.m13 * m2.m30,
-        m1.m10 * m2.m01 + m1.m11 * m2.m11 + m1.m12 * m2.m21 + m1.m13 * m2.m31,
-        m1.m10 * m2.m02 + m1.m11 * m2.m12 + m1.m12 * m2.m22 + m1.m13 * m2.m32,
-        m1.m10 * m2.m03 + m1.m11 * m2.m13 + m1.m12 * m2.m23 + m1.m13 * m2.m33,
-
-        m1.m20 * m2.m00 + m1.m21 * m2.m10 + m1.m22 * m2.m20 + m1.m23 * m2.m30,
-        m1.m20 * m2.m01 + m1.m21 * m2.m11 + m1.m22 * m2.m21 + m1.m23 * m2.m31,
-        m1.m20 * m2.m02 + m1.m21 * m2.m12 + m1.m22 * m2.m22 + m1.m23 * m2.m32,
-        m1.m20 * m2.m03 + m1.m21 * m2.m13 + m1.m22 * m2.m23 + m1.m23 * m2.m33,
-
-        m1.m30 * m2.m00 + m1.m31 * m2.m10 + m1.m32 * m2.m20 + m1.m33 * m2.m30,
-        m1.m30 * m2.m01 + m1.m31 * m2.m11 + m1.m32 * m2.m21 + m1.m33 * m2.m31,
-        m1.m30 * m2.m02 + m1.m31 * m2.m12 + m1.m32 * m2.m22 + m1.m33 * m2.m32,
-        m1.m30 * m2.m03 + m1.m31 * m2.m13 + m1.m32 * m2.m23 + m1.m33 * m2.m33);
-  }
-
-  /**
-   * Transform the vector vec using this Matrix4f and place the result back into
-   * vec.
-   * 
-   * @param vec
-   *        the single precision vector to be transformed
-   */
-  public void transform(T4 vec) {
-    transform2(vec, vec);
-  }
-
-  /**
-   * Transform the vector vec using this Matrix4f and place the result into
-   * vecOut.
-   * 
-   * @param vec
-   *        the single precision vector to be transformed
-   * @param vecOut
-   *        the vector into which the transformed values are placed
-   */
-  public void transform2(T4 vec, T4 vecOut) {
-    // alias-safe
-    vecOut.set4(m00 * vec.x + m01 * vec.y + m02 * vec.z + m03 * vec.w, m10
-        * vec.x + m11 * vec.y + m12 * vec.z + m13 * vec.w, m20 * vec.x + m21
-        * vec.y + m22 * vec.z + m23 * vec.w, m30 * vec.x + m31 * vec.y + m32
-        * vec.z + m33 * vec.w);
-  }
-
-  /**
-   * Transforms the point parameter with this Matrix4f and places the result
-   * back into point. The fourth element of the point input parameter is assumed
-   * to be one.
-   * 
-   * @param point
-   *        the input point to be transformed.
-   */
-  public void rotTrans(T3 point) {
-    rotTrans2(point, point);
-  }
-
-  /**
-   * Transforms the point parameter with this Matrix4f and places the result
-   * into pointOut. The fourth element of the point input parameter is assumed to
-   * be one. point may be pointOut
-   * 
-   * @param point
-   *        the input point to be transformed.
-   * @param pointOut
-   *        the transformed point
-   * @return pointOut
-   */
-  public T3 rotTrans2(T3 point, T3 pointOut) {
-      pointOut.set(
-          m00 * point.x + m01 * point.y + m02 * point.z + m03, 
-          m10 * point.x + m11 * point.y + m12 * point.z + m13, 
-          m20 * point.x + m21 * point.y + m22 * point.z + m23);
-      return pointOut;
-  }
-
-  /**
-   * Sets the value of this matrix to a rotation matrix about the w axis by the
-   * passed angle.
-   * 
-   * @param angle
-   *        the angle to rotate about the W axis in radians
-   * @return this
-   */
-  public M4 setAsXYRotation(float angle) {
-    setIdentity();
-    double c = Math.cos(angle);
-    double s = Math.sin(angle);
-    m22 = (float) c;
-    m23 = (float) -s;
-    m32 = (float) s;
-    m33 = (float) c;
-    return this;
-  }
-
-  /**
-   * Sets the value of this matrix to a rotation matrix about the w axis by the
-   * passed angle.
-   * 
-   * @param angle
-   *        the angle to rotate about the W axis in radians
-   * @return this
-   */
-  public M4 setAsYZRotation(float angle) {
-    setIdentity();
-    double c = Math.cos(angle);
-    double s = Math.sin(angle);
-    m00 = (float) c;
-    m03 = (float) -s;
-    m30 = (float) s;
-    m33 = (float) c;
-    return this;
-  }
-
-  /**
-   * Sets the value of this matrix to a rotation matrix about the w axis by the
-   * passed angle.
-   * 
-   * @param angle
-   *        the angle to rotate about the W axis in radians
-   * @return this
-   */
-  public M4 setAsXZRotation(float angle) {
-    setIdentity();
-    double c = Math.cos(angle);
-    double s = Math.sin(angle);
-    m11 = (float) c;
-    m13 = (float) -s;
-    m31 = (float) s;
-    m33 = (float) c;
-    return this;
-  }
-
-  /**
-   * Returns true if the Object o is of type Matrix4f and all of the data
-   * members of t1 are equal to the corresponding data members in this Matrix4f.
-   * 
-   * @param o
-   *        the object with which the comparison is made.
-   */
-  @Override
-  public boolean equals(Object o) {
-    if (!(o instanceof M4))
-      return false;
-    M4 m = (M4) o;
-    return (this.m00 == m.m00 && this.m01 == m.m01 && this.m02 == m.m02
-        && this.m03 == m.m03 && this.m10 == m.m10 && this.m11 == m.m11
-        && this.m12 == m.m12 && this.m13 == m.m13 && this.m20 == m.m20
-        && this.m21 == m.m21 && this.m22 == m.m22 && this.m23 == m.m23
-        && this.m30 == m.m30 && this.m31 == m.m31 && this.m32 == m.m32 && this.m33 == m.m33);
-  }
-
-  /**
-   * Returns a hash number based on the data values in this object. Two
-   * different Matrix4f objects with identical data values (ie, returns true for
-   * equals(Matrix4f) ) will return the same hash number. Two objects with
-   * different data members may return the same hash value, although this is not
-   * likely.
-   * 
-   * @return the integer hash value
-   */
-  @Override
-  public int hashCode() {
-    return T3.floatToIntBits(m00) ^ T3.floatToIntBits(m01)
-        ^ T3.floatToIntBits(m02) ^ T3.floatToIntBits(m03)
-        ^ T3.floatToIntBits(m10) ^ T3.floatToIntBits(m11)
-        ^ T3.floatToIntBits(m12) ^ T3.floatToIntBits(m13)
-        ^ T3.floatToIntBits(m20) ^ T3.floatToIntBits(m21)
-        ^ T3.floatToIntBits(m22) ^ T3.floatToIntBits(m23)
-        ^ T3.floatToIntBits(m30) ^ T3.floatToIntBits(m31)
-        ^ T3.floatToIntBits(m32) ^ T3.floatToIntBits(m33);
-  }
-
-  /**
-   * Returns a string that contains the values of this Matrix4f.
-   * 
-   * @return the String representation
-   */
-  @Override
-  public String toString() {
-    return "[\n  [" + m00 + "\t" + m01 + "\t" + m02 + "\t" + m03 + "]"
-        + "\n  [" + m10 + "\t" + m11 + "\t" + m12 + "\t" + m13 + "]" + "\n  ["
-        + m20 + "\t" + m21 + "\t" + m22 + "\t" + m23 + "]" + "\n  [" + m30
-        + "\t" + m31 + "\t" + m32 + "\t" + m33 + "] ]";
-  }
-  public M4 round(float f) {
-    m00 = rnd(m00, f);
-    m01 = rnd(m01, f);
-    m02 = rnd(m02, f);
-    m03 = rnd(m03, f);
-    m10 = rnd(m10, f);
-    m11 = rnd(m11, f);
-    m12 = rnd(m12, f);
-    m13 = rnd(m13, f);
-    m20 = rnd(m20, f);
-    m21 = rnd(m21, f);
-    m22 = rnd(m22, f);
-    m23 = rnd(m23, f);
-    m30 = rnd(m30, f);
-    m31 = rnd(m31, f);
-    m32 = rnd(m32, f);
-    m33 = rnd(m33, f);
-    return this;
-  }
-
-  private float rnd(float n, float f) {
-    return (Math.abs(n) < f ? 0 : n);
-  }
-}