4 * A base class for both M3 and M4 to conserve code size.
\r
6 * @author Kenji hiranabe
\r
8 * additions by Bob Hanson hansonr@stolaf.edu 9/30/2012 for unique
\r
9 * constructor and method names for the optimization of compiled
\r
10 * JavaScript using Java2Script and for subclassing to M3 and M4
\r
13 public abstract class M34 {
\r
16 * The first element of the first row
\r
21 * The second element of the first row.
\r
26 * third element of the first row.
\r
31 * The first element of the second row.
\r
36 * The second element of the second row.
\r
41 * The third element of the second row.
\r
46 * The first element of the third row.
\r
51 * The second element of the third row.
\r
56 * The third element of the third row.
\r
60 protected void setAA33(A4 a) {
\r
64 double angle = a.angle;
\r
65 // Taken from Rick's which is taken from Wertz. pg. 412
\r
66 // Bug Fixed and changed into right-handed by hiranabe
\r
67 double n = Math.sqrt(x * x + y * y + z * z);
\r
68 // zero-div may occur
\r
73 double c = Math.cos(angle);
\r
74 double s = Math.sin(angle);
\r
75 double omc = 1.0 - c;
\r
76 m00 = (float) (c + x * x * omc);
\r
77 m11 = (float) (c + y * y * omc);
\r
78 m22 = (float) (c + z * z * omc);
\r
80 double tmp1 = x * y * omc;
\r
81 double tmp2 = z * s;
\r
82 m01 = (float) (tmp1 - tmp2);
\r
83 m10 = (float) (tmp1 + tmp2);
\r
87 m02 = (float) (tmp1 + tmp2);
\r
88 m20 = (float) (tmp1 - tmp2);
\r
92 m12 = (float) (tmp1 - tmp2);
\r
93 m21 = (float) (tmp1 + tmp2);
\r
96 public void rotate(T3 t) {
\r
102 * Transform the vector vec using this Matrix3f and place the result into
\r
106 * the single precision vector to be transformed
\r
108 * the vector into which the transformed values are placed
\r
110 public void rotate2(T3 t, T3 result) {
\r
112 result.set(m00 * t.x + m01 * t.y + m02 * t.z, m10 * t.x + m11 * t.y + m12
\r
113 * t.z, m20 * t.x + m21 * t.y + m22 * t.z);
\r
118 * Sets the value of this matrix to the double value of the Matrix3f argument.
\r
123 protected void setM33(M34 m1) {
\r
135 protected void clear33() {
\r
136 m00 = m01 = m02 = m10 = m11 = m12 = m20 = m21 = m22 = 0.0f;
\r
139 protected void set33(int row, int col, float v) {
\r
184 protected float get33(int row, int col) {
\r
221 protected void setRow33(int row, float v[]) {
\r
243 public abstract void getRow(int row, float v[]);
\r
245 protected void getRow33(int row, float v[]) {
\r
266 protected void setColumn33(int column, float v[]) {
\r
288 protected void getColumn33(int column, float v[]) {
\r
310 protected void add33(M34 m1) {
\r
322 protected void sub33(M34 m1) {
\r
334 protected void mul33(float x) {
\r
346 protected void transpose33() {
\r
360 protected void setXRot(float angle) {
\r
361 double c = Math.cos(angle);
\r
362 double s = Math.sin(angle);
\r
374 protected void setYRot(float angle) {
\r
375 double c = Math.cos(angle);
\r
376 double s = Math.sin(angle);
\r
388 protected void setZRot(float angle) {
\r
389 double c = Math.cos(angle);
\r
390 double s = Math.sin(angle);
\r
403 * @return 3x3 determinant
\r
405 public float determinant3() {
\r
406 return m00 * (m11 * m22 - m21 * m12) - m01 * (m10 * m22 - m20 * m12) + m02
\r
407 * (m10 * m21 - m20 * m11);
\r
410 protected void err() {
\r
411 throw new ArrayIndexOutOfBoundsException(
\r
412 "matrix column/row out of bounds");
\r