Stores a 3x3 matrix of float
elements.
More...
Public Types | |
typedef float | ScalarType |
Public Member Functions | |
GfMatrix3f ()=default | |
Default constructor. Leaves the matrix component values undefined. More... | |
GfMatrix3f (float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22) | |
Constructor. More... | |
GfMatrix3f (const float m[3][3]) | |
Constructor. More... | |
GfMatrix3f (float s) | |
Constructor. More... | |
GfMatrix3f (int s) | |
This explicit constructor initializes the matrix to s times the identity matrix. More... | |
GfMatrix3f (const GfVec3f &v) | |
Constructor. More... | |
GF_API | GfMatrix3f (const std::vector< std::vector< double > > &v) |
Constructor. More... | |
GF_API | GfMatrix3f (const std::vector< std::vector< float > > &v) |
Constructor. More... | |
GF_API | GfMatrix3f (const GfRotation &rot) |
Constructor. Initialize matrix from rotation. More... | |
GF_API | GfMatrix3f (const GfQuatf &rot) |
Constructor. Initialize matrix from a quaternion. More... | |
GF_API | GfMatrix3f (const class GfMatrix3d &m) |
This explicit constructor converts a "double" matrix to a "float" matrix. More... | |
void | SetRow (int i, const GfVec3f &v) |
Sets a row of the matrix from a Vec3. More... | |
void | SetColumn (int i, const GfVec3f &v) |
Sets a column of the matrix from a Vec3. More... | |
GfVec3f | GetRow (int i) const |
Gets a row of the matrix as a Vec3. More... | |
GfVec3f | GetColumn (int i) const |
Gets a column of the matrix as a Vec3. More... | |
GfMatrix3f & | Set (float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22) |
Sets the matrix from 9 independent float values, specified in row-major order. More... | |
GfMatrix3f & | Set (const float m[3][3]) |
Sets the matrix from a 3x3 array of float values, specified in row-major order. More... | |
GfMatrix3f & | SetIdentity () |
Sets the matrix to the identity matrix. More... | |
GfMatrix3f & | SetZero () |
Sets the matrix to zero. More... | |
GF_API GfMatrix3f & | SetDiagonal (float s) |
Sets the matrix to s times the identity matrix. More... | |
GF_API GfMatrix3f & | SetDiagonal (const GfVec3f &) |
Sets the matrix to have diagonal (v[0], v[1], v[2] ). More... | |
GF_API float * | Get (float m[3][3]) const |
Fills a 3x3 array of float values with the values in the matrix, specified in row-major order. More... | |
float * | data () |
Returns raw access to components of matrix as an array of float values. More... | |
const float * | data () const |
Returns const raw access to components of matrix as an array of float values. More... | |
float * | GetArray () |
Returns vector components as an array of float values. More... | |
const float * | GetArray () const |
Returns vector components as a const array of float values. More... | |
float * | operator[] (int i) |
Accesses an indexed row i of the matrix as an array of 3 float values so that standard indexing (such as m[0][1] ) works correctly. More... | |
const float * | operator[] (int i) const |
Accesses an indexed row i of the matrix as an array of 3 float values so that standard indexing (such as m[0][1] ) works correctly. More... | |
GF_API bool | operator== (const GfMatrix3d &m) const |
Tests for element-wise matrix equality. More... | |
GF_API bool | operator== (const GfMatrix3f &m) const |
Tests for element-wise matrix equality. More... | |
bool | operator!= (const GfMatrix3d &m) const |
Tests for element-wise matrix inequality. More... | |
bool | operator!= (const GfMatrix3f &m) const |
Tests for element-wise matrix inequality. More... | |
GF_API GfMatrix3f | GetTranspose () const |
Returns the transpose of the matrix. More... | |
GF_API GfMatrix3f | GetInverse (double *det=NULL, double eps=0) const |
Returns the inverse of the matrix, or FLT_MAX * SetIdentity() if the matrix is singular. More... | |
GF_API double | GetDeterminant () const |
Returns the determinant of the matrix. More... | |
GF_API bool | Orthonormalize (bool issueWarning=true) |
Makes the matrix orthonormal in place. More... | |
GF_API GfMatrix3f | GetOrthonormalized (bool issueWarning=true) const |
Returns an orthonormalized copy of the matrix. More... | |
GF_API double | GetHandedness () const |
Returns the sign of the determinant of the matrix, i.e. More... | |
bool | IsRightHanded () const |
Returns true if the vectors in the matrix form a right-handed coordinate system. More... | |
bool | IsLeftHanded () const |
Returns true if the vectors in matrix form a left-handed coordinate system. More... | |
GF_API GfMatrix3f & | operator*= (const GfMatrix3f &m) |
Post-multiplies matrix m into this matrix. More... | |
GF_API GfMatrix3f & | operator*= (double) |
Multiplies the matrix by a float. More... | |
GF_API GfMatrix3f & | operator+= (const GfMatrix3f &m) |
Adds matrix m to this matrix. More... | |
GF_API GfMatrix3f & | operator-= (const GfMatrix3f &m) |
Subtracts matrix m from this matrix. More... | |
GF_API GfMatrix3f & | SetScale (float scaleFactor) |
Sets matrix to specify a uniform scaling by scaleFactor. More... | |
3D Transformation Utilities | |
GF_API GfMatrix3f & | SetRotate (const GfQuatf &rot) |
Sets the matrix to specify a rotation equivalent to rot. More... | |
GF_API GfMatrix3f & | SetRotate (const GfRotation &rot) |
Sets the matrix to specify a rotation equivalent to rot. More... | |
GF_API GfMatrix3f & | SetScale (const GfVec3f &scaleFactors) |
Sets the matrix to specify a nonuniform scaling in x, y, and z by the factors in vector scaleFactors. More... | |
GF_API GfRotation | ExtractRotation () const |
Returns the rotation corresponding to this matrix. More... | |
GF_API GfVec3f | DecomposeRotation (const GfVec3f &axis0, const GfVec3f &axis1, const GfVec3f &axis2) const |
Decompose the rotation corresponding to this matrix about 3 orthogonal axes. More... | |
GF_API GfQuaternion | ExtractRotationQuaternion () const |
Returns the quaternion corresponding to this matrix. More... | |
Static Public Attributes | |
static const size_t | numRows = 3 |
static const size_t | numColumns = 3 |
Friends | |
class | GfMatrix3d |
size_t | hash_value (GfMatrix3f const &m) |
Hash. More... | |
GfMatrix3f | operator* (const GfMatrix3f &m1, double d) |
Returns the product of a matrix and a float. More... | |
GfMatrix3f | operator* (double d, const GfMatrix3f &m) |
GF_API friend GfMatrix3f | operator- (const GfMatrix3f &m) |
Returns the unary negation of matrix m. More... | |
GfMatrix3f | operator+ (const GfMatrix3f &m1, const GfMatrix3f &m2) |
Adds matrix m2 to m1. More... | |
GfMatrix3f | operator- (const GfMatrix3f &m1, const GfMatrix3f &m2) |
Subtracts matrix m2 from m1. More... | |
GfMatrix3f | operator* (const GfMatrix3f &m1, const GfMatrix3f &m2) |
Multiplies matrix m1 by m2. More... | |
GfMatrix3f | operator/ (const GfMatrix3f &m1, const GfMatrix3f &m2) |
Divides matrix m1 by m2 (that is, m1 * inv(m2) ). More... | |
GfVec3f | operator* (const GfMatrix3f &m, const GfVec3f &vec) |
Returns the product of a matrix m and a column vector vec. More... | |
GfVec3f | operator* (const GfVec3f &vec, const GfMatrix3f &m) |
Returns the product of row vector vec and a matrix m. More... | |
Stores a 3x3 matrix of float
elements.
A basic type.
Matrices are defined to be in row-major order, so matrix[i][j]
indexes the element in the i th row and the j th column.
Three methods, SetRotate(), SetScale(), and ExtractRotation(), interpret a GfMatrix3f as a 3D transformation. By convention, vectors are treated primarily as row vectors, implying the following:
Definition at line 82 of file matrix3f.h.
|
default |
Default constructor. Leaves the matrix component values undefined.
|
inline |
Constructor.
Initializes the matrix from 9 independent float
values, specified in row-major order. For example, parameter m10 specifies the value in row 1 and column 0.
Definition at line 96 of file matrix3f.h.
|
inline |
Constructor.
Initializes the matrix from a 3x3 array of float
values, specified in row-major order.
Definition at line 106 of file matrix3f.h.
|
inlineexplicit |
Constructor.
Explicitly initializes the matrix to s times the identity matrix.
Definition at line 112 of file matrix3f.h.
|
inlineexplicit |
This explicit constructor initializes the matrix to s
times the identity matrix.
Definition at line 118 of file matrix3f.h.
|
inlineexplicit |
Constructor.
Explicitly initializes the matrix to diagonal form, with the i th element on the diagonal set to v[i]
.
Definition at line 124 of file matrix3f.h.
|
explicit |
Constructor.
Initialize the matrix from a vector of vectors of double. The vector is expected to be 3x3. If it is too big, only the first 3 rows and/or columns will be used. If it is too small, uninitialized elements will be filled in with the corresponding elements from an identity matrix.
|
explicit |
Constructor.
Initialize the matrix from a vector of vectors of float. The vector is expected to be 3x3. If it is too big, only the first 3 rows and/or columns will be used. If it is too small, uninitialized elements will be filled in with the corresponding elements from an identity matrix.
GF_API GfMatrix3f | ( | const GfRotation & | rot | ) |
Constructor. Initialize matrix from rotation.
|
explicit |
Constructor. Initialize matrix from a quaternion.
|
explicit |
This explicit constructor converts a "double" matrix to a "float" matrix.
|
inline |
Returns raw access to components of matrix as an array of float
values.
Components are in row-major order.
Definition at line 234 of file matrix3f.h.
|
inline |
Returns const raw access to components of matrix as an array of float
values.
Components are in row-major order.
Definition at line 240 of file matrix3f.h.
GF_API GfVec3f DecomposeRotation | ( | const GfVec3f & | axis0, |
const GfVec3f & | axis1, | ||
const GfVec3f & | axis2 | ||
) | const |
Decompose the rotation corresponding to this matrix about 3 orthogonal axes.
If the axes are not orthogonal, warnings will be spewed.
This is a convenience method that is equivalent to calling ExtractRotation().Decompose().
GF_API GfRotation ExtractRotation | ( | ) | const |
Returns the rotation corresponding to this matrix.
This works well only if the matrix represents a rotation.
For good results, consider calling Orthonormalize() before calling this method.
GF_API GfQuaternion ExtractRotationQuaternion | ( | ) | const |
Returns the quaternion corresponding to this matrix.
This works well only if the matrix represents a rotation.
For good results, consider calling Orthonormalize() before calling this method.
GF_API float* Get | ( | float | m[3][3] | ) | const |
Fills a 3x3 array of float
values with the values in the matrix, specified in row-major order.
|
inline |
Returns vector components as an array of float
values.
Definition at line 245 of file matrix3f.h.
|
inline |
Returns vector components as a const array of float
values.
Definition at line 250 of file matrix3f.h.
|
inline |
Gets a column of the matrix as a Vec3.
Definition at line 178 of file matrix3f.h.
GF_API double GetDeterminant | ( | ) | const |
Returns the determinant of the matrix.
GF_API double GetHandedness | ( | ) | const |
Returns the sign of the determinant of the matrix, i.e.
1 for a right-handed matrix, -1 for a left-handed matrix, and 0 for a singular matrix.
GF_API GfMatrix3f GetInverse | ( | double * | det = NULL , |
double | eps = 0 |
||
) | const |
Returns the inverse of the matrix, or FLT_MAX * SetIdentity() if the matrix is singular.
(FLT_MAX is the largest value a float
can have, as defined by the system.) The matrix is considered singular if the determinant is less than or equal to the optional parameter eps. If det is non-null, *det
is set to the determinant.
GF_API GfMatrix3f GetOrthonormalized | ( | bool | issueWarning = true | ) | const |
Returns an orthonormalized copy of the matrix.
|
inline |
Gets a row of the matrix as a Vec3.
Definition at line 173 of file matrix3f.h.
GF_API GfMatrix3f GetTranspose | ( | ) | const |
Returns the transpose of the matrix.
|
inline |
Returns true if the vectors in matrix form a left-handed coordinate system.
Definition at line 341 of file matrix3f.h.
|
inline |
Returns true if the vectors in the matrix form a right-handed coordinate system.
Definition at line 335 of file matrix3f.h.
|
inline |
Tests for element-wise matrix inequality.
All elements must match exactly for matrices to be considered equal.
Definition at line 286 of file matrix3f.h.
|
inline |
Tests for element-wise matrix inequality.
All elements must match exactly for matrices to be considered equal.
Definition at line 292 of file matrix3f.h.
GF_API GfMatrix3f& operator*= | ( | const GfMatrix3f & | m | ) |
Post-multiplies matrix m into this matrix.
GF_API GfMatrix3f& operator*= | ( | double | ) |
Multiplies the matrix by a float.
GF_API GfMatrix3f& operator+= | ( | const GfMatrix3f & | m | ) |
Adds matrix m to this matrix.
GF_API GfMatrix3f& operator-= | ( | const GfMatrix3f & | m | ) |
Subtracts matrix m from this matrix.
GF_API bool operator== | ( | const GfMatrix3d & | m | ) | const |
Tests for element-wise matrix equality.
All elements must match exactly for matrices to be considered equal.
GF_API bool operator== | ( | const GfMatrix3f & | m | ) | const |
Tests for element-wise matrix equality.
All elements must match exactly for matrices to be considered equal.
|
inline |
Accesses an indexed row i of the matrix as an array of 3 float
values so that standard indexing (such as m[0][1]
) works correctly.
Definition at line 257 of file matrix3f.h.
|
inline |
Accesses an indexed row i of the matrix as an array of 3 float
values so that standard indexing (such as m[0][1]
) works correctly.
Definition at line 262 of file matrix3f.h.
GF_API bool Orthonormalize | ( | bool | issueWarning = true | ) |
Makes the matrix orthonormal in place.
This is an iterative method that is much more stable than the previous cross/cross method. If the iterative method does not converge, a warning is issued.
Returns true if the iteration converged, false otherwise. Leaves any translation part of the matrix unchanged. If issueWarning is true, this method will issue a warning if the iteration does not converge, otherwise it will be silent.
|
inline |
Sets the matrix from 9 independent float
values, specified in row-major order.
For example, parameter m10 specifies the value in row 1 and column 0.
Definition at line 185 of file matrix3f.h.
|
inline |
Sets the matrix from a 3x3 array of float
values, specified in row-major order.
Definition at line 196 of file matrix3f.h.
|
inline |
Sets a column of the matrix from a Vec3.
Definition at line 166 of file matrix3f.h.
GF_API GfMatrix3f& SetDiagonal | ( | float | s | ) |
Sets the matrix to s times the identity matrix.
GF_API GfMatrix3f& SetDiagonal | ( | const GfVec3f & | ) |
Sets the matrix to have diagonal (v[0], v[1], v[2]
).
|
inline |
Sets the matrix to the identity matrix.
Definition at line 210 of file matrix3f.h.
GF_API GfMatrix3f& SetRotate | ( | const GfQuatf & | rot | ) |
Sets the matrix to specify a rotation equivalent to rot.
GF_API GfMatrix3f& SetRotate | ( | const GfRotation & | rot | ) |
Sets the matrix to specify a rotation equivalent to rot.
|
inline |
Sets a row of the matrix from a Vec3.
Definition at line 159 of file matrix3f.h.
GF_API GfMatrix3f& SetScale | ( | float | scaleFactor | ) |
Sets matrix to specify a uniform scaling by scaleFactor.
GF_API GfMatrix3f& SetScale | ( | const GfVec3f & | scaleFactors | ) |
Sets the matrix to specify a nonuniform scaling in x, y, and z by the factors in vector scaleFactors.
|
inline |
Sets the matrix to zero.
Definition at line 215 of file matrix3f.h.
|
friend |
Hash.
Definition at line 265 of file matrix3f.h.
|
friend |
Returns the product of a matrix and a float.
Definition at line 354 of file matrix3f.h.
|
friend |
Multiplies matrix m1 by m2.
Definition at line 396 of file matrix3f.h.
|
friend |
Returns the product of a matrix m and a column vector vec.
Definition at line 410 of file matrix3f.h.
|
friend |
Returns the product of row vector vec and a matrix m.
Definition at line 417 of file matrix3f.h.
|
friend |
Adds matrix m2 to m1.
Definition at line 380 of file matrix3f.h.
|
friend |
Returns the unary negation of matrix m.
|
friend |
Subtracts matrix m2 from m1.
Definition at line 388 of file matrix3f.h.
|
friend |
Divides matrix m1 by m2 (that is, m1 * inv(m2)
).
Definition at line 404 of file matrix3f.h.