+++ /dev/null
-package javajs.util;
-
-/**
- * A base class for both M3 and M4 to conserve code size.
- *
- * @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 and for subclassing to M3 and M4
- *
- */
-public abstract class M34 {
-
- /**
- * The first element of the first row
- */
- public float m00;
-
- /**
- * The second element of the first row.
- */
- public float m01;
-
- /**
- * third element of the first row.
- */
- public float m02;
-
- /**
- * The first element of the second row.
- */
- public float m10;
-
- /**
- * The second element of the second row.
- */
- public float m11;
-
- /**
- * The third element of the second row.
- */
- public float m12;
-
- /**
- * The first element of the third row.
- */
- public float m20;
-
- /**
- * The second element of the third row.
- */
- public float m21;
-
- /**
- * The third element of the third row.
- */
- public float m22;
-
- protected void setAA33(A4 a) {
- double x = a.x;
- double y = a.y;
- double z = a.z;
- double angle = a.angle;
- // Taken from Rick's which is taken from Wertz. pg. 412
- // Bug Fixed and changed into right-handed by hiranabe
- double n = Math.sqrt(x * x + y * y + z * z);
- // zero-div may occur
- n = 1 / n;
- x *= n;
- y *= n;
- z *= n;
- double c = Math.cos(angle);
- double s = Math.sin(angle);
- double omc = 1.0 - c;
- m00 = (float) (c + x * x * omc);
- m11 = (float) (c + y * y * omc);
- m22 = (float) (c + z * z * omc);
-
- double tmp1 = x * y * omc;
- double tmp2 = z * s;
- m01 = (float) (tmp1 - tmp2);
- m10 = (float) (tmp1 + tmp2);
-
- tmp1 = x * z * omc;
- tmp2 = y * s;
- m02 = (float) (tmp1 + tmp2);
- m20 = (float) (tmp1 - tmp2);
-
- tmp1 = y * z * omc;
- tmp2 = x * s;
- m12 = (float) (tmp1 - tmp2);
- m21 = (float) (tmp1 + tmp2);
- }
-
- public void rotate(T3 t) {
- // alias-safe
- rotate2(t, t);
- }
-
- /**
- * Transform the vector vec using this Matrix3f and place the result into
- * vecOut.
- *
- * @param t
- * the single precision vector to be transformed
- * @param result
- * the vector into which the transformed values are placed
- */
- public void rotate2(T3 t, T3 result) {
- // alias-safe
- result.set(m00 * t.x + m01 * t.y + m02 * t.z, m10 * t.x + m11 * t.y + m12
- * t.z, m20 * t.x + m21 * t.y + m22 * t.z);
- }
-
-
- /**
- * Sets the value of this matrix to the double value of the Matrix3f argument.
- *
- * @param m1
- * the matrix3f
- */
- protected void setM33(M34 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;
- }
-
- protected void clear33() {
- m00 = m01 = m02 = m10 = m11 = m12 = m20 = m21 = m22 = 0.0f;
- }
-
- protected void set33(int row, int col, float v) {
- switch (row) {
- case 0:
- switch (col) {
- case 0:
- m00 = v;
- return;
- case 1:
- m01 = v;
- return;
- case 2:
- m02 = v;
- return;
- }
- break;
- case 1:
- switch (col) {
- case 0:
- m10 = v;
- return;
- case 1:
- m11 = v;
- return;
- case 2:
- m12 = v;
- return;
- }
- break;
- case 2:
- switch (col) {
- case 0:
- m20 = v;
- return;
- case 1:
- m21 = v;
- return;
- case 2:
- m22 = v;
- return;
- }
- break;
- }
- err();
- }
-
- protected float get33(int row, int col) {
- switch (row) {
- case 0:
- switch (col) {
- case 0:
- return m00;
- case 1:
- return m01;
- case 2:
- return m02;
- }
- break;
- case 1:
- switch (col) {
- case 0:
- return m10;
- case 1:
- return m11;
- case 2:
- return m12;
- }
- break;
- case 2:
- switch (col) {
- case 0:
- return m20;
- case 1:
- return m21;
- case 2:
- return m22;
- }
- break;
- }
- err();
- return 0;
- }
-
- protected void setRow33(int row, float v[]) {
- switch (row) {
- case 0:
- m00 = v[0];
- m01 = v[1];
- m02 = v[2];
- return;
- case 1:
- m10 = v[0];
- m11 = v[1];
- m12 = v[2];
- return;
- case 2:
- m20 = v[0];
- m21 = v[1];
- m22 = v[2];
- return;
- default:
- err();
- }
- }
-
- public abstract void getRow(int row, float v[]);
-
- protected void getRow33(int row, float v[]) {
- switch (row) {
- case 0:
- v[0] = m00;
- v[1] = m01;
- v[2] = m02;
- return;
- case 1:
- v[0] = m10;
- v[1] = m11;
- v[2] = m12;
- return;
- case 2:
- v[0] = m20;
- v[1] = m21;
- v[2] = m22;
- return;
- }
- err();
- }
-
- protected void setColumn33(int column, float v[]) {
- switch(column) {
- case 0:
- m00 = v[0];
- m10 = v[1];
- m20 = v[2];
- break;
- case 1:
- m01 = v[0];
- m11 = v[1];
- m21 = v[2];
- break;
- case 2:
- m02 = v[0];
- m12 = v[1];
- m22 = v[2];
- break;
- default:
- err();
- }
- }
-
- protected void getColumn33(int column, float v[]) {
- switch(column) {
- case 0:
- v[0] = m00;
- v[1] = m10;
- v[2] = m20;
- break;
- case 1:
- v[0] = m01;
- v[1] = m11;
- v[2] = m21;
- break;
- case 2:
- v[0] = m02;
- v[1] = m12;
- v[2] = m22;
- break;
- default:
- err();
- }
- }
-
- protected void add33(M34 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;
- }
-
- protected void sub33(M34 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;
- }
-
- protected void mul33(float x) {
- m00 *= x;
- m01 *= x;
- m02 *= x;
- m10 *= x;
- m11 *= x;
- m12 *= x;
- m20 *= x;
- m21 *= x;
- m22 *= x;
- }
-
- protected void transpose33() {
- float tmp = m01;
- m01 = m10;
- m10 = tmp;
-
- tmp = m02;
- m02 = m20;
- m20 = tmp;
-
- tmp = m12;
- m12 = m21;
- m21 = tmp;
- }
-
- protected void setXRot(float angle) {
- double c = Math.cos(angle);
- double s = Math.sin(angle);
- m00 = 1.0f;
- m01 = 0.0f;
- m02 = 0.0f;
- m10 = 0.0f;
- m11 = (float) c;
- m12 = (float) -s;
- m20 = 0.0f;
- m21 = (float) s;
- m22 = (float) c;
- }
-
- protected void setYRot(float angle) {
- double c = Math.cos(angle);
- double s = Math.sin(angle);
- m00 = (float) c;
- m01 = 0.0f;
- m02 = (float) s;
- m10 = 0.0f;
- m11 = 1.0f;
- m12 = 0.0f;
- m20 = (float) -s;
- m21 = 0.0f;
- m22 = (float) c;
- }
-
- protected void setZRot(float angle) {
- double c = Math.cos(angle);
- double s = Math.sin(angle);
- m00 = (float) c;
- m01 = (float) -s;
- m02 = 0.0f;
- m10 = (float) s;
- m11 = (float) c;
- m12 = 0.0f;
- m20 = 0.0f;
- m21 = 0.0f;
- m22 = 1.0f;
- }
-
- /**
- * @return 3x3 determinant
- */
- public float determinant3() {
- return m00 * (m11 * m22 - m21 * m12) - m01 * (m10 * m22 - m20 * m12) + m02
- * (m10 * m21 - m20 * m11);
- }
-
- protected void err() {
- throw new ArrayIndexOutOfBoundsException(
- "matrix column/row out of bounds");
- }
-
-
-}