public final class MatrixM3x3D extends Object
A 3x3 mutable matrix type with double elements.
Values of type MatrixM3x3D are backed by direct memory, with the
rows and columns of the matrices being stored in column-major format. This
allows the matrices to be passed to OpenGL directly, without requiring
transposition.
Values of this type cannot be accessed safely from multiple threads without explicit synchronization.
See "Mathematics for 3D Game Programming and Computer Graphics" 2nd Ed for the derivations of most of the code in this class (ISBN: 1-58450-277-0).
See http://en.wikipedia.org/wiki/Row_equivalence#Elementary_row_operations for the three elementary operations defined on matrices.
| Modifier and Type | Class and Description |
|---|---|
static class |
MatrixM3x3D.ContextMM3D
The
ContextMM3D type contains the minimum storage required for
all of the functions of the MatrixM3x3D class. |
| Modifier and Type | Method and Description |
|---|---|
static <M extends MatrixWritable3x3DType> |
add(MatrixReadable3x3DType m0,
MatrixReadable3x3DType m1,
M out)
Elementwise add of matrices
m0 and m1. |
static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> |
addInPlace(M m0,
MatrixReadable3x3DType m1)
Elementwise add of matrices
m0 and m1, returning the result
in m0. |
static <M extends MatrixWritable3x3DType> |
addRowScaled(MatrixM3x3D.ContextMM3D c,
MatrixReadable3x3DType m,
int row_a,
int row_b,
int row_c,
double r,
M out)
Add the values in row
row_b to the values in row row_a
scaled by r, saving the resulting row in row row_c of the
matrix out. |
static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> |
addRowScaledInPlace(MatrixM3x3D.ContextMM3D c,
M m,
int row_a,
int row_b,
int row_c,
double r)
Add the values in row
row_b to the values in row row_a
scaled by r, saving the resulting row in row row_c of the
matrix m. |
static boolean |
compareElements(MatrixReadable3x3DType m0,
MatrixReadable3x3DType m1)
Compare matrices.
|
static <M extends MatrixWritable3x3DType> |
copy(MatrixReadable3x3DType input,
M output)
Copy the contents of the matrix
input to the matrix output,
completely replacing all elements. |
static double |
determinant(MatrixReadable3x3DType m)
Calculate the determinant of the matrix
m. |
static <M extends MatrixWritable3x3DType> |
exchangeRows(MatrixM3x3D.ContextMM3D c,
MatrixReadable3x3DType m,
int row_a,
int row_b,
M out)
Exchange the row
row_a and row row_b of the matrix
m, saving the exchanged rows to out. |
static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> |
exchangeRowsInPlace(MatrixM3x3D.ContextMM3D c,
M m,
int row_a,
int row_b)
Exchange the row
row_a and row row_b of the matrix
m, saving the exchanged rows to m. |
static int |
hashElements(MatrixReadable3x3DType m)
Hash matrices.
|
static <M extends MatrixWritable3x3DType> |
invert(MatrixM3x3D.ContextMM3D c,
MatrixReadable3x3DType m,
M out)
Calculate the inverse of the matrix
m, saving the resulting matrix
to out. |
static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> |
invertInPlace(MatrixM3x3D.ContextMM3D c,
M m)
Calculate the inverse of the matrix
m, saving the resulting matrix
to m. |
static <M extends MatrixWritable3x3DType,V extends VectorWritable3DType> |
lookAt(MatrixM3x3D.ContextMM3D context,
VectorReadable3DType origin,
VectorReadable3DType target,
VectorReadable3DType up,
M out_matrix,
V out_translation)
Calculate a rotation and translation representing a "camera" looking
from the point
origin to the point target. |
static <M extends MatrixWritable3x3DType> |
makeRotation(double angle,
VectorReadable3DType axis,
M out)
Generate a matrix that represents a rotation of
angle radians
around the axis axis and save to out. |
static <M extends MatrixWritable3x3DType> |
makeTranslation2D(VectorReadable2DType v,
M out)
Create a translation matrix that represents a translation by the vector
v, writing the resulting matrix to out. |
static <M extends MatrixWritable3x3DType> |
makeTranslation2I(VectorReadable2IType v,
M out)
Create a translation matrix that represents a translation by the vector
v, writing the resulting matrix to out. |
static <M extends MatrixWritable3x3DType> |
multiply(MatrixReadable3x3DType m0,
MatrixReadable3x3DType m1,
M out)
Multiply the matrix
m0 with the matrix m1, writing the
result to out. |
static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> |
multiplyInPlace(M m0,
MatrixReadable3x3DType m1)
Multiply the matrix
m0 with the matrix m1, writing the
result to m0. |
static <V extends VectorWritable3DType> |
multiplyVector3D(MatrixM3x3D.ContextMM3D c,
MatrixReadable3x3DType m,
VectorReadable3DType v,
V out)
Multiply the matrix
m with the vector v, writing the
resulting vector to out. |
static <M extends MatrixWritable3x3DType> |
scale(MatrixReadable3x3DType m,
double r,
M out)
Scale all elements of the matrix
m by the scaling value r,
saving the result in out. |
static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> |
scaleInPlace(M m,
double r)
Scale all elements of the matrix
m by the scaling value r,
saving the result in m. |
static <M extends MatrixWritable3x3DType> |
scaleRow(MatrixM3x3D.ContextMM3D c,
MatrixReadable3x3DType m,
int row,
double r,
M out)
Scale row
r of the matrix m by r, saving the
result to row r of out. |
static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> |
scaleRowInPlace(MatrixM3x3D.ContextMM3D c,
M m,
int row,
double r)
Scale row
r of the matrix m by r, saving the
result to row r of m. |
static <M extends MatrixWritable3x3DType> |
setIdentity(M m)
Set the given matrix
m to the identity matrix. |
static <M extends MatrixWritable3x3DType> |
setZero(M m)
Set the given matrix
m to the zero matrix. |
static void |
showElements(MatrixReadable3x3DType m,
StringBuilder sb)
Show matrices.
|
static double |
trace(MatrixReadable3x3DType m)
Return the trace of the matrix
m. |
static <M extends MatrixWritable3x3DType> |
transpose(MatrixReadable3x3DType m,
M out)
Transpose the given matrix
m, writing the resulting matrix to
out. |
static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> |
transposeInPlace(M m)
Transpose the given matrix
m, writing the resulting matrix to
m. |
public static <M extends MatrixWritable3x3DType> M add(MatrixReadable3x3DType m0, MatrixReadable3x3DType m1, M out)
m0 and m1.M - The precise type of matrixm0 - The left input matrixm1 - The right input matrixout - The output matrixoutpublic static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> M addInPlace(M m0, MatrixReadable3x3DType m1)
m0 and m1, returning the result
in m0.M - The precise type of matrixm0 - The left input matrixm1 - The right input matrixm0public static <M extends MatrixWritable3x3DType> M addRowScaled(MatrixM3x3D.ContextMM3D c, MatrixReadable3x3DType m, int row_a, int row_b, int row_c, double r, M out)
Add the values in row row_b to the values in row row_a
scaled by r, saving the resulting row in row row_c of the
matrix out.
This is one of the three elementary operations defined on matrices.
M - The precise type of matrixc - Preallocated storagem - The input matrixrow_a - The row on the lefthand side of the additionrow_b - The row on the righthand side of the additionrow_c - The destination rowr - The scaling valueout - The output matrixoutpublic static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> M addRowScaledInPlace(MatrixM3x3D.ContextMM3D c, M m, int row_a, int row_b, int row_c, double r)
Add the values in row row_b to the values in row row_a
scaled by r, saving the resulting row in row row_c of the
matrix m.
This is one of the three elementary operations defined on matrices.
M - The precise type of matrixc - Preallocated storagem - The input matrixrow_a - The row on the lefthand side of the additionrow_b - The row on the righthand side of the additionrow_c - The destination rowr - The scaling valuempublic static <M extends MatrixWritable3x3DType> M copy(MatrixReadable3x3DType input, M output)
input to the matrix output,
completely replacing all elements.M - The precise type of matrixinput - The input vectoroutput - The output vectoroutputpublic static double determinant(MatrixReadable3x3DType m)
m.m - The input matrixpublic static <M extends MatrixWritable3x3DType> M exchangeRows(MatrixM3x3D.ContextMM3D c, MatrixReadable3x3DType m, int row_a, int row_b, M out)
Exchange the row row_a and row row_b of the matrix
m, saving the exchanged rows to out.
This is one of the three elementary operations defined on matrices.
M - The precise type of matrixc - Preallocated storagem - The input matrixrow_a - The first rowrow_b - The second rowout - The output matrixoutpublic static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> M exchangeRowsInPlace(MatrixM3x3D.ContextMM3D c, M m, int row_a, int row_b)
Exchange the row row_a and row row_b of the matrix
m, saving the exchanged rows to m.
This is one of the three elementary operations defined on matrices.
M - The precise type of matrixc - Preallocated storagem - The input matrixrow_a - The first rowrow_b - The second rowmpublic static <M extends MatrixWritable3x3DType> boolean invert(MatrixM3x3D.ContextMM3D c, MatrixReadable3x3DType m, M out)
m, saving the resulting matrix
to out. The function returns Some(out) iff it was possible
to invert the matrix, and None otherwise. It is not possible to
invert a matrix that has a determinant of 0. If the function
returns None, m is untouched.M - The precise type of matrixc - Preallocated storagem - The input matrixout - The output matrixtrue iff the matrix was invertibledeterminant(MatrixReadable3x3DType)public static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> boolean invertInPlace(MatrixM3x3D.ContextMM3D c, M m)
m, saving the resulting matrix
to m. The function returns Some(m) iff it was possible to
invert the matrix, and None otherwise. It is not possible to invert
a matrix that has a determinant of 0. If the function returns
None, m is untouched.M - The precise type of matrixc - Preallocated storagem - The input matrixtrue iff the matrix was invertibledeterminant(MatrixReadable3x3DType)public static <M extends MatrixWritable3x3DType,V extends VectorWritable3DType> void lookAt(MatrixM3x3D.ContextMM3D context, VectorReadable3DType origin, VectorReadable3DType target, VectorReadable3DType up, M out_matrix, V out_translation)
Calculate a rotation and translation representing a "camera" looking
from the point origin to the point target. target
must represent the "up" vector for the camera. Usually, this is simply a
unit vector (0, 1, 0) representing the Y axis.
The
function uses preallocated storage from context.
The view
is expressed as a rotation matrix and a translation vector, written to
out_matrix and out_translation, respectively.
M - The precise type of matrixV - The precise type of vectorcontext - Preallocated storageout_matrix - The output matrixout_translation - The output translationorigin - The position of the viewertarget - The target being viewedup - The up vectorpublic static <M extends MatrixWritable3x3DType> M makeRotation(double angle, VectorReadable3DType axis, M out)
Generate a matrix that represents a rotation of angle radians
around the axis axis and save to out.
The function assumes a right-handed coordinate system and therefore a positive rotation around any axis represents a counter-clockwise rotation around that axis.
M - The precise type of matrixangle - The angle in radiansaxis - The axisout - The output matrixoutpublic static <M extends MatrixWritable3x3DType> M makeTranslation2D(VectorReadable2DType v, M out)
v, writing the resulting matrix to out.M - The precise type of matrixv - The translation vectorout - The output matrixoutpublic static <M extends MatrixWritable3x3DType> M makeTranslation2I(VectorReadable2IType v, M out)
v, writing the resulting matrix to out.M - The precise type of matrixv - The translation vectorout - The output matrixoutpublic static <M extends MatrixWritable3x3DType> M multiply(MatrixReadable3x3DType m0, MatrixReadable3x3DType m1, M out)
m0 with the matrix m1, writing the
result to out.M - The precise type of matrixm0 - The left input vectorm1 - The right input vectorout - The output vectoroutpublic static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> M multiplyInPlace(M m0, MatrixReadable3x3DType m1)
m0 with the matrix m1, writing the
result to m0.M - The precise type of matrixm0 - The left input vectorm1 - The right input vectoroutpublic static <V extends VectorWritable3DType> V multiplyVector3D(MatrixM3x3D.ContextMM3D c, MatrixReadable3x3DType m, VectorReadable3DType v, V out)
m with the vector v, writing the
resulting vector to out.V - The precise type of writable vectorc - Preallocated storagem - The input matrixv - The input vectorout - The output vectoroutpublic static <M extends MatrixWritable3x3DType> M scale(MatrixReadable3x3DType m, double r, M out)
m by the scaling value r,
saving the result in out.M - The precise type of matrixm - The input matrixr - The scaling valueout - The output matrixoutpublic static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> M scaleInPlace(M m, double r)
m by the scaling value r,
saving the result in m.M - The precise type of matrixm - The input matrixr - The scaling valuempublic static <M extends MatrixWritable3x3DType> M scaleRow(MatrixM3x3D.ContextMM3D c, MatrixReadable3x3DType m, int row, double r, M out)
Scale row r of the matrix m by r, saving the
result to row r of out.
This is one of the three elementary operations defined on matrices.
M - The precise type of matrixc - Preallocated storagem - The input matrixrow - The index of the row (0 <= row < 3)r - The scaling valueout - The output matrixoutpublic static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> M scaleRowInPlace(MatrixM3x3D.ContextMM3D c, M m, int row, double r)
Scale row r of the matrix m by r, saving the
result to row r of m.
This is one of the three elementary operations defined on matrices.
M - The precise type of matrixc - Preallocated storagem - The input matrixrow - The index of the row (0 <= row < 3)r - The scaling valuempublic static <M extends MatrixWritable3x3DType> M setIdentity(M m)
m to the identity matrix.M - The precise type of matrixm - The input matrixmpublic static <M extends MatrixWritable3x3DType> M setZero(M m)
m to the zero matrix.M - The precise type of matrixm - The input matrixmpublic static double trace(MatrixReadable3x3DType m)
m. The trace is defined as the sum
of the diagonal elements of the matrix.m - The input matrixpublic static <M extends MatrixWritable3x3DType> M transpose(MatrixReadable3x3DType m, M out)
m, writing the resulting matrix to
out.M - The precise type of matrixm - The input matrixout - The output matrixoutpublic static <M extends MatrixWritable3x3DType & MatrixReadable3x3DType> M transposeInPlace(M m)
m, writing the resulting matrix to
m.M - The precise type of matrixm - The input matrixmpublic static boolean compareElements(MatrixReadable3x3DType m0, MatrixReadable3x3DType m1)
m0 - The left matrixm1 - The right matrixtrue if all elements of m0 are equal to m1.public static int hashElements(MatrixReadable3x3DType m)
m - The input matrixmpublic static void showElements(MatrixReadable3x3DType m, StringBuilder sb)
m in square-bracketed
matrix form.m - The input matrixsb - The string builderCopyright © 2015 <code@io7m.com> http://io7m.com