OpenVDB 13.0.0

Loading...
Searching...
No Matches
Mat3< T > Class Template Reference

3x3 matrix class. More...

`#include <openvdb/math/Mat3.h>`

Inheritance diagram for Mat3< T >:

## Public Types
using | value_type = T
| Data type held by the matrix.
using | ValueType = T
using | MyBase = Mat<3, T>
enum | SIZE_

## Public Member Functions
| Mat3 ()=default
| Mat3 (const Quat< T > &q)
template<typename Source>
| Mat3 (Source a, Source b, Source c, Source d, Source e, Source f, Source g, Source h, Source i)
| Constructor given array of elements, the ordering is in row major form:
template<typename Source>
| Mat3 (const Vec3< Source > &v1, const Vec3< Source > &v2, const Vec3< Source > &v3, bool rows=true)
template<typename Source>
| Mat3 (Source *a)
template<typename Source>
| Mat3 (const Mat3< Source > &m)
| Conversion constructor.
| Mat3 (const Mat4< T > &m)
| Conversion from Mat4 (copies top left).
void | setRow (int i, const Vec3< T > &v)
| Set ith row to vector v.
Vec3< T > | row (int i) const
| Get ith row, e.g. Vec3d v = m.row(1);.
void | setCol (int j, const Vec3< T > &v)
| Set jth column to vector v.
Vec3< T > | col (int j) const
| Get jth column, e.g. Vec3d v = m.col(0);.
T & | operator() (int i, int j)
T | operator() (int i, int j) const
void | setRows (const Vec3< T > &v1, const Vec3< T > &v2, const Vec3< T > &v3)
| Set the rows of this matrix to the vectors v1, v2, v3.
void | setColumns (const Vec3< T > &v1, const Vec3< T > &v2, const Vec3< T > &v3)
| Set the columns of this matrix to the vectors v1, v2, v3.
void | setSymmetric (const Vec3< T > &vdiag, const Vec3< T > &vtri)
| Set diagonal and symmetric triangular components.
void | setSkew (const Vec3< T > &v)
| Set the matrix as cross product of the given vector.
void | setToRotation (const Quat< T > &q)
| Set this matrix to the rotation matrix specified by the quaternion.
void | setToRotation (const Vec3< T > &axis, T angle)
| Set this matrix to the rotation specified by axis and angle.
void | setZero ()
| Set this matrix to zero.
void | setIdentity ()
| Set this matrix to identity.
template<typename Source>
const Mat3 & | operator= (const Mat3< Source > &m)
| Assignment operator.
bool | eq (const Mat3 &m, T eps=T(1.0e-8)) const
| Return `true` if this matrix is equivalent to m within a tolerance of eps.
Mat3< T > | operator- () const
| Negation operator, for e.g. m1 = -m2;.
template<typename S>
const Mat3< T > & | operator*= (S scalar)
| Multiplication operator, e.g. M = scalar * M;.
template<typename S>
const Mat3< T > & | operator+= (const Mat3< S > &m1)
| Add each element of the given matrix to the corresponding element of this matrix.
template<typename S>
const Mat3< T > & | operator-= (const Mat3< S > &m1)
| Subtract each element of the given matrix from the corresponding element of this matrix.
template<typename S>
const Mat3< T > & | operator*= (const Mat3< S > &m1)
| Multiply this matrix by the given matrix.
Mat3 | cofactor () const
| Return the cofactor matrix of this matrix.
Mat3 | adjoint () const
| Return the adjoint of this matrix, i.e., the transpose of its cofactor.
Mat3 | transpose () const
| returns transpose of this
Mat3 | inverse (T tolerance=0) const
T | det () const
| Determinant of matrix.
T | trace () const
| Trace of matrix.
Mat3 | snapBasis (Axis axis, const Vec3< T > &direction)
template<typename T0>
Vec3< T0 > | transform (const Vec3< T0 > &v) const
template<typename T0>
Vec3< T0 > | pretransform (const Vec3< T0 > &v) const
Mat3 | timesDiagonal (const Vec3< T > &diag) const
| Treat diag as a diagonal matrix and return the product of this matrix with diag (from the right).
std::string | str (unsigned indentation=0) const
T * | asPointer ()
| Direct access to the internal data.
const T * | asPointer () const
T * | operator[] (int i)
| Array style reference to ith row.
const T * | operator[] (int i) const
void | write (std::ostream &os) const
void | read (std::istream &is)
T | absMax () const
| Return the maximum of the absolute of all elements in this matrix.
bool | isNan () const
| True if a Nan is present in this matrix.
bool | isInfinite () const
| True if an Inf is present in this matrix.
bool | isFinite () const
| True if no Nan or Inf values are present.
bool | isZero () const
| True if all elements are exactly zero.

## Static Public Member Functions
static const Mat3< T > & | identity ()
| Predefined constant for identity matrix.
static const Mat3< T > & | zero ()
| Predefined constant for zero matrix.
static Mat3 | symmetric (const Vec3< T > &vdiag, const Vec3< T > &vtri)
| Return a matrix with the prescribed diagonal and symmetric triangular components.
static unsigned | numRows ()
static unsigned | numColumns ()
static unsigned | numElements ()

## Protected Attributes
T | mm [SIZE *SIZE]

## Related Symbols
(Note that these are not member symbols.)
template<typename T0, typename T1>
bool | operator== (const Mat3< T0 > &m0, const Mat3< T1 > &m1)
| Equality operator, does exact floating point comparisons.
template<typename T0, typename T1>
bool | operator!= (const Mat3< T0 > &m0, const Mat3< T1 > &m1)
| Inequality operator, does exact floating point comparisons.
template<typename S, typename T>
Mat3< typename promote< S, T >::type > | operator* (S scalar, const Mat3< T > &m)
| Multiply each element of the given matrix by scalar and return the result.
template<typename S, typename T>
Mat3< typename promote< S, T >::type > | operator* (const Mat3< T > &m, S scalar)
| Multiply each element of the given matrix by scalar and return the result.
template<typename T0, typename T1>
Mat3< typename promote< T0, T1 >::type > | operator+ (const Mat3< T0 > &m0, const Mat3< T1 > &m1)
| Add corresponding elements of m0 and m1 and return the result.
template<typename T0, typename T1>
Mat3< typename promote< T0, T1 >::type > | operator- (const Mat3< T0 > &m0, const Mat3< T1 > &m1)
| Subtract corresponding elements of m0 and m1 and return the result.
template<typename T, typename MT>
Vec3< typename promote< T, MT >::type > | operator* (const Mat3< MT > &_m, const Vec3< T > &_v)
| Multiply _m by _v and return the resulting vector.
template<typename T, typename MT>
Vec3< typename promote< T, MT >::type > | operator* (const Vec3< T > &_v, const Mat3< MT > &_m)
| Multiply _v by _m and return the resulting vector.
template<typename T, typename MT>
Vec3< T > & | operator*= (Vec3< T > &_v, const Mat3< MT > &_m)
| Multiply _v by _m and replace _v with the resulting vector.

## Detailed Description

template<typename T>
class openvdb::v13_0::math::Mat3< T >

3x3 matrix class.

## Member Typedef Documentation

## ◆ MyBase

template<typename T>

using MyBase = Mat<3, T>

## ◆ value_type

template<typename T>

using value_type = T

Data type held by the matrix.

## ◆ ValueType

template<typename T>

using ValueType = T

## Member Enumeration Documentation

## ◆ SIZE_

enum SIZE_
| inherited

## Constructor & Destructor Documentation

## ◆ Mat3() [1/7]

template<typename T>

Mat3 | ( |  | ) |
| default

Trivial constructor, the matrix is NOT initialized

Note
  destructor, copy constructor, assignment operator and move constructor are left to be defined by the compiler (default)

## ◆ Mat3() [2/7]

template<typename T>

Mat3 | ( | const Quat< T > & | q | ) |
| inline

Constructor given the quaternion rotation, e.g. Mat3f m(q); The quaternion is normalized and used to construct the matrix

## ◆ Mat3() [3/7]

template<typename T>
template<typename Source>

Mat3 | ( | Source | a,
|  | Source | b,
|  | Source | c,
|  | Source | d,
|  | Source | e,
|  | Source | f,
|  | Source | g,
|  | Source | h,
|  | Source | i )
| inline

Constructor given array of elements, the ordering is in row major form:

    a b c
    d e f
    g h i

## ◆ Mat3() [4/7]

template<typename T>
template<typename Source>

Mat3 | ( | const Vec3< Source > & | v1,
|  | const Vec3< Source > & | v2,
|  | const Vec3< Source > & | v3,
|  | bool | rows = true )
| inline

Construct matrix from rows or columns vectors (defaults to rows for historical reasons)

## ◆ Mat3() [5/7]

template<typename T>
template<typename Source>

Mat3 | ( | Source * | a | ) |
| inline

Constructor given array of elements, the ordering is in row major form:
a[0] a[1] a[2]
a[3] a[4] a[5]
a[6] a[7] a[8]

## ◆ Mat3() [6/7]

template<typename T>
template<typename Source>

Mat3 | ( | const Mat3< Source > & | m | ) |
| inline explicit

Conversion constructor.

## ◆ Mat3() [7/7]

template<typename T>

Mat3 | ( | const Mat4< T > & | m | ) |
| inline explicit

Conversion from Mat4 (copies top left).

## Member Function Documentation

## ◆ absMax()

T absMax | ( |  | ) | const
| inline inherited

Return the maximum of the absolute of all elements in this matrix.

## ◆ adjoint()

template<typename T>

Mat3 adjoint | ( |  | ) | const
| inline nodiscard

Return the adjoint of this matrix, i.e., the transpose of its cofactor.

## ◆ asPointer() [1/2]

T * asPointer | ( |  | ) |
| inline inherited

Direct access to the internal data.

## ◆ asPointer() [2/2]

const T * asPointer | ( |  | ) | const
| inline inherited

## ◆ cofactor()

template<typename T>

Mat3 cofactor | ( |  | ) | const
| inline nodiscard

Return the cofactor matrix of this matrix.

## ◆ col()

template<typename T>

Vec3< T > col | ( | int | j | ) | const
| inline

Get jth column, e.g. Vec3d v = m.col(0);.

## ◆ det()

template<typename T>

T det | ( |  | ) | const
| inline

Determinant of matrix.

## ◆ eq()

template<typename T>

bool eq | ( | const Mat3< T > & | m,
|  | T | eps = T(1.0e-8) ) const
| inline

Return `true` if this matrix is equivalent to m within a tolerance of eps.

## ◆ identity()

template<typename T>

const Mat3< T > & identity | ( |  | ) |
| inline static

Predefined constant for identity matrix.

## ◆ inverse()

template<typename T>

Mat3 inverse | ( | T | tolerance = 0 | ) | const
| inline nodiscard

returns inverse of this

Exceptions

  ArithmeticError | if singular

## ◆ isFinite()

bool isFinite | ( |  | ) | const
| inline inherited

True if no Nan or Inf values are present.

## ◆ isInfinite()

bool isInfinite | ( |  | ) | const
| inline inherited

True if an Inf is present in this matrix.

## ◆ isNan()

bool isNan | ( |  | ) | const
| inline inherited

True if a Nan is present in this matrix.

## ◆ isZero()

bool isZero | ( |  | ) | const
| inline inherited

True if all elements are exactly zero.

## ◆ numColumns()

unsigned numColumns | ( |  | ) |
| inline static inherited

## ◆ numElements()

unsigned numElements | ( |  | ) |
| inline static inherited

## ◆ numRows()

unsigned numRows | ( |  | ) |
| inline static inherited

## ◆ operator()() [1/2]

template<typename T>

T & operator() | ( | int | i,
|  | int | j )
| inline

Alternative indexed reference to the elements Note that the indices are row first and column second. e.g. m(0,0) = 1;

## ◆ operator()() [2/2]

template<typename T>

T operator() | ( | int | i,
|  | int | j ) const
| inline

Alternative indexed constant reference to the elements, Note that the indices are row first and column second. e.g. float f = m(1,0);

## ◆ operator*=() [1/2]

template<typename T>
template<typename S>

const Mat3< T > & operator*= | ( | const Mat3< S > & | m1 | ) |
| inline

Multiply this matrix by the given matrix.

## ◆ operator*=() [2/2]

template<typename T>
template<typename S>

const Mat3< T > & operator*= | ( | S | scalar | ) |
| inline

Multiplication operator, e.g. M = scalar * M;.

Multiply each element of this matrix by scalar.

## ◆ operator+=()

template<typename T>
template<typename S>

const Mat3< T > & operator+= | ( | const Mat3< S > & | m1 | ) |
| inline

Add each element of the given matrix to the corresponding element of this matrix.

## ◆ operator-()

template<typename T>

Mat3< T > operator- | ( |  | ) | const
| inline

Negation operator, for e.g. m1 = -m2;.

## ◆ operator-=()

template<typename T>
template<typename S>

const Mat3< T > & operator-= | ( | const Mat3< S > & | m1 | ) |
| inline

Subtract each element of the given matrix from the corresponding element of this matrix.

## ◆ operator=()

template<typename T>
template<typename Source>

const Mat3 & operator= | ( | const Mat3< Source > & | m | ) |
| inline

Assignment operator.

## ◆ operator[]() [1/2]

T * operator[] | ( | int | i | ) |
| inline inherited

Array style reference to ith row.

## ◆ operator[]() [2/2]

const T * operator[] | ( | int | i | ) | const
| inline inherited

## ◆ pretransform()

template<typename T>
template<typename T0>

Vec3< T0 > pretransform | ( | const Vec3< T0 > & | v | ) | const
| inline

Return the transformed vector by transpose of this matrix. This function is equivalent to pre-multiplying the matrix.

## ◆ read()

void read | ( | std::istream & | is | ) |
| inline inherited

## ◆ row()

template<typename T>

Vec3< T > row | ( | int | i | ) | const
| inline

Get ith row, e.g. Vec3d v = m.row(1);.

## ◆ setCol()

template<typename T>

void setCol | ( | int | j,
|  | const Vec3< T > & | v )
| inline

Set jth column to vector v.

## ◆ setColumns()

template<typename T>

void setColumns | ( | const Vec3< T > & | v1,
|  | const Vec3< T > & | v2,
|  | const Vec3< T > & | v3 )
| inline

Set the columns of this matrix to the vectors v1, v2, v3.

## ◆ setIdentity()

template<typename T>

void setIdentity | ( |  | ) |
| inline

Set this matrix to identity.

## ◆ setRow()

template<typename T>

void setRow | ( | int | i,
|  | const Vec3< T > & | v )
| inline

Set ith row to vector v.

## ◆ setRows()

template<typename T>

void setRows | ( | const Vec3< T > & | v1,
|  | const Vec3< T > & | v2,
|  | const Vec3< T > & | v3 )
| inline

Set the rows of this matrix to the vectors v1, v2, v3.

## ◆ setSkew()

template<typename T>

void setSkew | ( | const Vec3< T > & | v | ) |
| inline

Set the matrix as cross product of the given vector.

## ◆ setSymmetric()

template<typename T>

void setSymmetric | ( | const Vec3< T > & | vdiag,
|  | const Vec3< T > & | vtri )
| inline

Set diagonal and symmetric triangular components.

## ◆ setToRotation() [1/2]

template<typename T>

void setToRotation | ( | const Quat< T > & | q | ) |
| inline

Set this matrix to the rotation matrix specified by the quaternion.

The quaternion is normalized and used to construct the matrix. Note that the matrix is transposed to match post-multiplication semantics.

## ◆ setToRotation() [2/2]

template<typename T>

void setToRotation | ( | const Vec3< T > & | axis,
|  | T | angle )
| inline

Set this matrix to the rotation specified by axis and angle.

The axis must be unit vector

## ◆ setZero()

template<typename T>

void setZero | ( |  | ) |
| inline

Set this matrix to zero.

## ◆ snapBasis()

template<typename T>

Mat3 snapBasis | ( | Axis | axis,
|  | const Vec3< T > & | direction )
| inline

This function snaps a specific axis to a specific direction, preserving scaling. It does this using minimum energy, thus posing a unique solution if basis & direction arent parralel. Direction need not be unit.

## ◆ str()

std::string str | ( | unsigned | indentation = 0 | ) | const
| inline inherited

Returns
  string representation of matrix Since output is multiline, optional indentation argument prefixes each newline with that much white space. It does not indent the first line, since you might be calling this inline:

cout << "matrix: " << mat.str(7)

matrix: [[1 2] [3 4]]

## ◆ symmetric()

template<typename T>

Mat3 symmetric | ( | const Vec3< T > & | vdiag,
|  | const Vec3< T > & | vtri )
| inline static

Return a matrix with the prescribed diagonal and symmetric triangular components.

## ◆ timesDiagonal()

template<typename T>

Mat3 timesDiagonal | ( | const Vec3< T > & | diag | ) | const
| inline nodiscard

Treat diag as a diagonal matrix and return the product of this matrix with diag (from the right).

## ◆ trace()

template<typename T>

T trace | ( |  | ) | const
| inline

Trace of matrix.

## ◆ transform()

template<typename T>
template<typename T0>

Vec3< T0 > transform | ( | const Vec3< T0 > & | v | ) | const
| inline

Return the transformed vector by this matrix. This function is equivalent to post-multiplying the matrix.

## ◆ transpose()

template<typename T>

Mat3 transpose | ( |  | ) | const
| inline

returns transpose of this

## ◆ write()

void write | ( | std::ostream & | os | ) | const
| inline inherited

## ◆ zero()

template<typename T>

const Mat3< T > & zero | ( |  | ) |
| inline static

Predefined constant for zero matrix.

## Friends And Related Symbol Documentation

## ◆ operator!=()

template<typename T0, typename T1>

bool operator!= | ( | const Mat3< T0 > & | m0,
|  | const Mat3< T1 > & | m1 )
| related

Inequality operator, does exact floating point comparisons.

## ◆ operator*() [1/4]

template<typename T, typename MT>

Vec3< typename promote< T, MT >::type > operator* | ( | const Mat3< MT > & | _m,
|  | const Vec3< T > & | _v )
| related

Multiply _m by _v and return the resulting vector.

## ◆ operator*() [2/4]

template<typename S, typename T>

Mat3< typename promote< S, T >::type > operator* | ( | const Mat3< T > & | m,
|  | S | scalar )
| related

Multiply each element of the given matrix by scalar and return the result.

## ◆ operator*() [3/4]

template<typename T, typename MT>

Vec3< typename promote< T, MT >::type > operator* | ( | const Vec3< T > & | _v,
|  | const Mat3< MT > & | _m )
| related

Multiply _v by _m and return the resulting vector.

## ◆ operator*() [4/4]

template<typename S, typename T>

Mat3< typename promote< S, T >::type > operator* | ( | S | scalar,
|  | const Mat3< T > & | m )
| related

Multiply each element of the given matrix by scalar and return the result.

## ◆ operator*=()

template<typename T, typename MT>

Vec3< T > & operator*= | ( | Vec3< T > & | _v,
|  | const Mat3< MT > & | _m )
| related

Multiply _v by _m and replace _v with the resulting vector.

## ◆ operator+()

template<typename T0, typename T1>

Mat3< typename promote< T0, T1 >::type > operator+ | ( | const Mat3< T0 > & | m0,
|  | const Mat3< T1 > & | m1 )
| related

Add corresponding elements of m0 and m1 and return the result.

## ◆ operator-()

template<typename T0, typename T1>

Mat3< typename promote< T0, T1 >::type > operator- | ( | const Mat3< T0 > & | m0,
|  | const Mat3< T1 > & | m1 )
| related

Subtract corresponding elements of m0 and m1 and return the result.

## ◆ operator==()

template<typename T0, typename T1>

bool operator== | ( | const Mat3< T0 > & | m0,
|  | const Mat3< T1 > & | m1 )
| related

Equality operator, does exact floating point comparisons.

## Member Data Documentation

## ◆ mm

T mm[SIZE *SIZE]
| protected inherited