Added methods to get and set elements, rows, columns.

Also clarified the element naming scheme, which is mCOLROW.
This commit is contained in:
Michael Bayne
2012-05-18 09:34:33 -07:00
parent 6a45db8e35
commit 00df755904
6 changed files with 272 additions and 22 deletions
+18 -9
View File
@@ -13,33 +13,42 @@ import pythagoras.util.SingularMatrixException;
*/ */
interface IMatrix3 interface IMatrix3
{ {
/** Returns the (0,0)th component of the matrix. */ /** Returns column 0, row 0 of the matrix. */
double m00 (); double m00 ();
/** Returns the (1,0)th component of the matrix. */ /** Returns column 1, row 0 of the matrix. */
double m10 (); double m10 ();
/** Returns the (2,0)th component of the matrix. */ /** Returns column 2, row 0 of the matrix. */
double m20 (); double m20 ();
/** Returns the (0,1)th component of the matrix. */ /** Returns column 0, row 1 of the matrix. */
double m01 (); double m01 ();
/** Returns the (1,1)th component of the matrix. */ /** Returns column 1, row 1 of the matrix. */
double m11 (); double m11 ();
/** Returns the (2,1)th component of the matrix. */ /** Returns column 2, row 1 of the matrix. */
double m21 (); double m21 ();
/** Returns the (0,2)th component of the matrix. */ /** Returns column 0, row 2 of the matrix. */
double m02 (); double m02 ();
/** Returns the (1,2)th component of the matrix. */ /** Returns column 1, row 2 of the matrix. */
double m12 (); double m12 ();
/** Returns the (2,2)th component of the matrix. */ /** Returns column 2, row 2 of the matrix. */
double m22 (); double m22 ();
/** Returns the matrix element at the specified row and column. */
double element (int row, int col);
/** Copies the requested row (0, 1, 2) into {@code result}. */
void getRow (int row, Vector3 result);
/** Copies the requested column (0, 1, 2) into {@code result}. */
void getColumn (int col, Vector3 result);
/** /**
* Transposes this matrix. * Transposes this matrix.
* *
+117 -1
View File
@@ -18,7 +18,7 @@ public class Matrix3 implements IMatrix3, Serializable
/** the identity matrix. */ /** the identity matrix. */
public static final Matrix3 IDENTITY = new Matrix3(); public static final Matrix3 IDENTITY = new Matrix3();
/** The values of the matrix. */ /** The values of the matrix. The names take the form {@mCOLROW}. */
public double m00, m10, m20; public double m00, m10, m20;
public double m01, m11, m21; public double m01, m11, m21;
public double m02, m12, m22; public double m02, m12, m22;
@@ -55,6 +55,74 @@ public class Matrix3 implements IMatrix3, Serializable
setToIdentity(); setToIdentity();
} }
/**
* Sets the matrix element at the specified row and column.
*/
public void setElement (int row, int col, double value) {
switch (col) {
case 0:
switch (row) {
case 0: m00 = value; return;
case 1: m01 = value; return;
case 2: m02 = value; return;
}
break;
case 1:
switch (row) {
case 0: m10 = value; return;
case 1: m11 = value; return;
case 2: m12 = value; return;
}
break;
case 2:
switch (row) {
case 0: m20 = value; return;
case 1: m21 = value; return;
case 2: m22 = value; return;
}
break;
}
throw new ArrayIndexOutOfBoundsException();
}
/**
* Sets the specified row (0, 1, 2) to the supplied values.
*/
public void setRow (int row, double x, double y, double z) {
switch (row) {
case 0: m00 = x; m10 = y; m20 = z; break;
case 1: m01 = x; m11 = y; m21 = z; break;
case 2: m02 = x; m12 = y; m22 = z; break;
default: throw new ArrayIndexOutOfBoundsException();
}
}
/**
* Sets the specified row (0, 1, 2) to the supplied vector.
*/
public void setRow (int row, Vector3 v) {
setRow(row, v.x(), v.y(), v.z());
}
/**
* Sets the specified column (0, 1, 2) to the supplied values.
*/
public void setColumn (int col, double x, double y, double z) {
switch (col) {
case 0: m00 = x; m01 = y; m02 = z; break;
case 1: m10 = x; m11 = y; m12 = z; break;
case 2: m20 = x; m21 = y; m22 = z; break;
default: throw new ArrayIndexOutOfBoundsException();
}
}
/**
* Sets the specified column (0, 1, 2) to the supplied vector.
*/
public void setColumn (int col, Vector3 v) {
setColumn(col, v.x(), v.y(), v.z());
}
/** /**
* Sets this matrix to the identity matrix. * Sets this matrix to the identity matrix.
* *
@@ -398,6 +466,54 @@ public class Matrix3 implements IMatrix3, Serializable
return m22; return m22;
} }
@Override // from IMatrix3
public double element (int row, int col) {
switch (col) {
case 0:
switch (row) {
case 0: return m00;
case 1: return m01;
case 2: return m02;
}
break;
case 1:
switch (row) {
case 0: return m10;
case 1: return m11;
case 2: return m12;
}
break;
case 2:
switch (row) {
case 0: return m20;
case 1: return m21;
case 2: return m22;
}
break;
}
throw new ArrayIndexOutOfBoundsException();
}
@Override // from IMatrix3
public void getRow (int row, Vector3 result) {
switch (row) {
case 0: result.x = m00; result.y = m10; result.z = m20; break;
case 1: result.x = m01; result.y = m11; result.z = m21; break;
case 2: result.x = m02; result.y = m12; result.z = m22; break;
default: throw new ArrayIndexOutOfBoundsException();
}
}
@Override // from IMatrix3
public void getColumn (int col, Vector3 result) {
switch (col) {
case 0: result.x = m00; result.y = m01; result.z = m02; break;
case 1: result.x = m10; result.y = m11; result.z = m12; break;
case 2: result.x = m20; result.y = m21; result.z = m22; break;
default: throw new ArrayIndexOutOfBoundsException();
}
}
@Override // from IMatrix3 @Override // from IMatrix3
public Matrix3 transpose () { public Matrix3 transpose () {
return transpose(new Matrix3()); return transpose(new Matrix3());
+1 -1
View File
@@ -21,7 +21,7 @@ public final class Matrix4 implements IMatrix4, Serializable
/** An empty matrix array. */ /** An empty matrix array. */
public static final Matrix4[] EMPTY_ARRAY = new Matrix4[0]; public static final Matrix4[] EMPTY_ARRAY = new Matrix4[0];
/** The values of the matrix. */ /** The values of the matrix. The names take the form {@mCOLROW}. */
public double m00, m10, m20, m30; public double m00, m10, m20, m30;
public double m01, m11, m21, m31; public double m01, m11, m21, m31;
public double m02, m12, m22, m32; public double m02, m12, m22, m32;
+18 -9
View File
@@ -13,33 +13,42 @@ import pythagoras.util.SingularMatrixException;
*/ */
interface IMatrix3 interface IMatrix3
{ {
/** Returns the (0,0)th component of the matrix. */ /** Returns column 0, row 0 of the matrix. */
float m00 (); float m00 ();
/** Returns the (1,0)th component of the matrix. */ /** Returns column 1, row 0 of the matrix. */
float m10 (); float m10 ();
/** Returns the (2,0)th component of the matrix. */ /** Returns column 2, row 0 of the matrix. */
float m20 (); float m20 ();
/** Returns the (0,1)th component of the matrix. */ /** Returns column 0, row 1 of the matrix. */
float m01 (); float m01 ();
/** Returns the (1,1)th component of the matrix. */ /** Returns column 1, row 1 of the matrix. */
float m11 (); float m11 ();
/** Returns the (2,1)th component of the matrix. */ /** Returns column 2, row 1 of the matrix. */
float m21 (); float m21 ();
/** Returns the (0,2)th component of the matrix. */ /** Returns column 0, row 2 of the matrix. */
float m02 (); float m02 ();
/** Returns the (1,2)th component of the matrix. */ /** Returns column 1, row 2 of the matrix. */
float m12 (); float m12 ();
/** Returns the (2,2)th component of the matrix. */ /** Returns column 2, row 2 of the matrix. */
float m22 (); float m22 ();
/** Returns the matrix element at the specified row and column. */
float element (int row, int col);
/** Copies the requested row (0, 1, 2) into {@code result}. */
void getRow (int row, Vector3 result);
/** Copies the requested column (0, 1, 2) into {@code result}. */
void getColumn (int col, Vector3 result);
/** /**
* Transposes this matrix. * Transposes this matrix.
* *
+117 -1
View File
@@ -18,7 +18,7 @@ public class Matrix3 implements IMatrix3, Serializable
/** the identity matrix. */ /** the identity matrix. */
public static final Matrix3 IDENTITY = new Matrix3(); public static final Matrix3 IDENTITY = new Matrix3();
/** The values of the matrix. */ /** The values of the matrix. The names take the form {@mCOLROW}. */
public float m00, m10, m20; public float m00, m10, m20;
public float m01, m11, m21; public float m01, m11, m21;
public float m02, m12, m22; public float m02, m12, m22;
@@ -55,6 +55,74 @@ public class Matrix3 implements IMatrix3, Serializable
setToIdentity(); setToIdentity();
} }
/**
* Sets the matrix element at the specified row and column.
*/
public void setElement (int row, int col, float value) {
switch (col) {
case 0:
switch (row) {
case 0: m00 = value; return;
case 1: m01 = value; return;
case 2: m02 = value; return;
}
break;
case 1:
switch (row) {
case 0: m10 = value; return;
case 1: m11 = value; return;
case 2: m12 = value; return;
}
break;
case 2:
switch (row) {
case 0: m20 = value; return;
case 1: m21 = value; return;
case 2: m22 = value; return;
}
break;
}
throw new ArrayIndexOutOfBoundsException();
}
/**
* Sets the specified row (0, 1, 2) to the supplied values.
*/
public void setRow (int row, float x, float y, float z) {
switch (row) {
case 0: m00 = x; m10 = y; m20 = z; break;
case 1: m01 = x; m11 = y; m21 = z; break;
case 2: m02 = x; m12 = y; m22 = z; break;
default: throw new ArrayIndexOutOfBoundsException();
}
}
/**
* Sets the specified row (0, 1, 2) to the supplied vector.
*/
public void setRow (int row, Vector3 v) {
setRow(row, v.x(), v.y(), v.z());
}
/**
* Sets the specified column (0, 1, 2) to the supplied values.
*/
public void setColumn (int col, float x, float y, float z) {
switch (col) {
case 0: m00 = x; m01 = y; m02 = z; break;
case 1: m10 = x; m11 = y; m12 = z; break;
case 2: m20 = x; m21 = y; m22 = z; break;
default: throw new ArrayIndexOutOfBoundsException();
}
}
/**
* Sets the specified column (0, 1, 2) to the supplied vector.
*/
public void setColumn (int col, Vector3 v) {
setColumn(col, v.x(), v.y(), v.z());
}
/** /**
* Sets this matrix to the identity matrix. * Sets this matrix to the identity matrix.
* *
@@ -398,6 +466,54 @@ public class Matrix3 implements IMatrix3, Serializable
return m22; return m22;
} }
@Override // from IMatrix3
public float element (int row, int col) {
switch (col) {
case 0:
switch (row) {
case 0: return m00;
case 1: return m01;
case 2: return m02;
}
break;
case 1:
switch (row) {
case 0: return m10;
case 1: return m11;
case 2: return m12;
}
break;
case 2:
switch (row) {
case 0: return m20;
case 1: return m21;
case 2: return m22;
}
break;
}
throw new ArrayIndexOutOfBoundsException();
}
@Override // from IMatrix3
public void getRow (int row, Vector3 result) {
switch (row) {
case 0: result.x = m00; result.y = m10; result.z = m20; break;
case 1: result.x = m01; result.y = m11; result.z = m21; break;
case 2: result.x = m02; result.y = m12; result.z = m22; break;
default: throw new ArrayIndexOutOfBoundsException();
}
}
@Override // from IMatrix3
public void getColumn (int col, Vector3 result) {
switch (col) {
case 0: result.x = m00; result.y = m01; result.z = m02; break;
case 1: result.x = m10; result.y = m11; result.z = m12; break;
case 2: result.x = m20; result.y = m21; result.z = m22; break;
default: throw new ArrayIndexOutOfBoundsException();
}
}
@Override // from IMatrix3 @Override // from IMatrix3
public Matrix3 transpose () { public Matrix3 transpose () {
return transpose(new Matrix3()); return transpose(new Matrix3());
+1 -1
View File
@@ -21,7 +21,7 @@ public final class Matrix4 implements IMatrix4, Serializable
/** An empty matrix array. */ /** An empty matrix array. */
public static final Matrix4[] EMPTY_ARRAY = new Matrix4[0]; public static final Matrix4[] EMPTY_ARRAY = new Matrix4[0];
/** The values of the matrix. */ /** The values of the matrix. The names take the form {@mCOLROW}. */
public float m00, m10, m20, m30; public float m00, m10, m20, m30;
public float m01, m11, m21, m31; public float m01, m11, m21, m31;
public float m02, m12, m22, m32; public float m02, m12, m22, m32;