HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
UT_Matrix3T< T > Class Template Reference

#include <UT_Matrix3.h>

Public Types

typedef T value_type
 

Public Member Functions

SYS_FORCE_INLINE UT_Matrix3T ()=default
 Construct uninitialized matrix. More...
 
constexpr UT_Matrix3T (const UT_Matrix3T &)=default
 Default copy constructor. More...
 
constexpr UT_Matrix3T (UT_Matrix3T &&)=default
 Default move constructor. More...
 
constexpr UT_Matrix3T (fpreal64 val) noexcept
 Construct identity matrix, multipled by scalar. More...
 
 UT_Matrix3T (const UT_Matrix4T< fpreal64 > &m)
 
template<typename S >
 UT_Matrix3T (const UT_SymMatrix3T< S > m)
 Construct from a symmetric 3x3 matrix. More...
 
UT_Matrix3T< T > & operator= (const UT_Matrix3T< T > &m)=default
 Default copy assignment operator. More...
 
UT_Matrix3T< T > & operator= (UT_Matrix3T< T > &&m)=default
 Default move assignment operator. More...
 
template<typename S >
UT_Matrix3T< T > & operator= (const UT_Matrix3T< S > &m) noexcept
 
template<typename S >
UT_Matrix3T< T > & operator= (const UT_SymMatrix3T< S > &m)
 Convert from a symmetric matrix to non-symmetric. More...
 
UT_SymMatrix3T< TlowerTriangularSymMatrix3 () const
 Convert this to a symmetric matrix, using the lower-triangular portion. More...
 
UT_SymMatrix3T< TupperTriangularSymMatrix3 () const
 Convert this to a symmetric matrix, using the upper-triangular portion. More...
 
UT_SymMatrix3T< TaveragedSymMatrix3 () const
 Convert this to a symmetric matrix, using averaged components. More...
 
UT_Matrix3T< Toperator- () const
 
SYS_FORCE_INLINE void addScaledMat (T k, const UT_Matrix3T< T > &m)
 
SYS_FORCE_INLINE UT_Matrix3T< T > & operator+= (const UT_Matrix3T< T > &m)
 
SYS_FORCE_INLINE UT_Matrix3T< T > & operator-= (const UT_Matrix3T< T > &m)
 
UT_Matrix3T< T > & operator*= (const UT_Matrix3T< T > &m)
 
template<typename S >
UT_Matrix3T< T > & operator*= (const UT_SymMatrix3T< S > &m)
 Multiply given symmetric matrix on the right. More...
 
template<typename S >
void leftMult (const UT_SymMatrix3T< S > &m)
 Multiply given symmetric matrix on the left. More...
 
template<typename S >
void leftMult (const UT_Matrix3T< S > &m)
 Multiply given matrix3 on the left. More...
 
void multiply3 (const UT_Matrix4 &m)
 
void multiply3 (const UT_DMatrix4 &m)
 
constexpr bool operator== (const UT_Matrix3T< T > &m) const noexcept
 
constexpr bool operator!= (const UT_Matrix3T< T > &m) const noexcept
 
UT_Matrix3T< T > & operator= (T val)
 
SYS_FORCE_INLINE UT_Matrix3T< T > & operator*= (T scalar)
 
SYS_FORCE_INLINE UT_Matrix3T< T > & operator/= (T scalar)
 
template<typename S >
UT_Matrix3T< T > & operator= (const UT_Vector3T< S > &vec)
 
template<typename S >
UT_Matrix3T< T > & operator+= (const UT_Vector3T< S > &vec)
 
template<typename S >
UT_Matrix3T< T > & operator-= (const UT_Vector3T< S > &vec)
 
void getBasis ()
 
void arbitrary180rot ()
 
template<typename S >
void arbitrary180rot (const UT_Vector3T< S > &v)
 
template<typename S >
void lookat (const UT_Vector3T< S > &from, const UT_Vector3T< S > &to, T roll=0)
 
template<typename S >
void lookat (const UT_Vector3T< S > &from, const UT_Vector3T< S > &to, const UT_Vector3T< S > &up)
 
template<typename S >
int orient (UT_Vector3T< S > &dir, UT_Vector3T< S > &up, int norm=1)
 
template<typename S >
int orientInverse (UT_Vector3T< S > &dir, UT_Vector3T< S > &up, int norm=1)
 
template<typename S >
void orientT (const UT_Vector3T< S > &v, T pscale, const UT_Vector3T< S > *s3, const UT_Vector3T< S > *up, const UT_QuaternionT< S > *q)
 
void orient (const UT_Vector3F &v, T pscale, const UT_Vector3F *s3, const UT_Vector3F *up, const UT_QuaternionF *q)
 
void orient (const UT_Vector3D &v, T pscale, const UT_Vector3D *s3, const UT_Vector3D *up, const UT_QuaternionD *q)
 
template<typename S >
void orientInverseT (const UT_Vector3T< S > &v, T pscale, const UT_Vector3T< S > *s3, const UT_Vector3T< S > *up, const UT_QuaternionT< S > *q)
 
void orientInverse (const UT_Vector3F &v, T pscale, const UT_Vector3F *s3, const UT_Vector3F *up, const UT_QuaternionF *q)
 
void orientInverse (const UT_Vector3D &v, T pscale, const UT_Vector3D *s3, const UT_Vector3D *up, const UT_QuaternionD *q)
 
SYS_FORCE_INLINE T coFactor (int k, int l) const
 
T determinant () const
 
T trace () const
 
template<typename S >
int eigenvalues (UT_Vector3T< S > &r, UT_Vector3T< S > &i) const
 
int invert ()
 
int invert (UT_Matrix3T< T > &m) const
 
int invertKramer (UT_Matrix3T< T > &m, T abs_det_threshold=FLT_EPSILON) const
 
int invertKramer (T abs_det_threshold=FLT_EPSILON)
 
int safeInvertSymmetric (T tol=1e-6f)
 
bool diagonalizeSymmetric (UT_Matrix3T< T > &R, UT_Matrix3T< T > &D, T tol=1e-6f, int maxiter=100) const
 
void svdDecomposition (UT_Matrix3T< T > &U, UT_Matrix3T< T > &S, UT_Matrix3T< T > &V, T tol=1e-6f) const
 
void splitCovarianceToRotationScale (UT_Matrix3T< T > &R, UT_Matrix3T< T > &S, T tol=1e-6f) const
 
bool isSymmetric (T tolerance=T(SYS_FTOLERANCE)) const
 
void transpose ()
 
UT_Matrix3T< TtransposedCopy () const
 
bool isEqual (const UT_Matrix3T< T > &m, T tolerance=T(SYS_FTOLERANCE)) const
 Check for equality within a tolerance level. More...
 
bool isAlmostEqual (const UT_Matrix3T< T > &m, int ulps=50) const
 
bool isLowerTriangular (T tolerance=T(SYS_FTOLERANCE)) const
 Check for lower triangular within a tolerance level to 0. More...
 
template<UT_Axis3::axis A, bool reverse = false>
SYS_FORCE_INLINE void rotateQuarter ()
 
template<UT_Axis3::axis A>
SYS_FORCE_INLINE void rotateHalf ()
 
template<UT_Axis3::axis A>
SYS_FORCE_INLINE void rotateWithQTurns (T theta, uint qturns)
 
template<UT_Axis3::axis A, bool reverse = false>
SYS_FORCE_INLINE void prerotateQuarter ()
 
template<UT_Axis3::axis A>
SYS_FORCE_INLINE void prerotateHalf ()
 
SYS_FORCE_INLINE void negate ()
 Negates this matrix, i.e. multiplies it by -1. More...
 
template<typename S >
bool decompose (const UT_XformOrder &order, UT_Vector3T< S > &rot, UT_Matrix3T< T > &stretch, const int max_iter=64, const T rel_tol=FLT_EPSILON) const
 
template<typename S >
void compose (const UT_XformOrder &order, const UT_Vector3T< S > &rot, const UT_Matrix3T< T > &stretch)
 
bool polarDecompose (UT_Matrix3T< T > *stretch=nullptr, bool reverse=true, const int max_iter=64, const T rel_tol=FLT_EPSILON)
 
bool makeRotationMatrix (UT_Matrix3T< T > *stretch=nullptr, bool reverse=true, const int max_iter=64, const T rel_tol=FLT_EPSILON)
 
template<typename S >
void extractScales2D (UT_Vector2T< S > &scales, S *shears=0)
 
template<typename S >
void rightExtractScales (UT_Vector3T< S > &scales, UT_Vector3T< S > *shears=nullptr)
 
template<typename S >
void rightExtractScales2D (UT_Vector2T< S > &scales, S *shears=nullptr)
 
void shearXY (T val)
 
void shearXZ (T val)
 
void shearYZ (T val)
 
template<typename S >
int solve (T cx, T cy, T cz, UT_Vector3T< S > &result) const
 
template<typename S >
int solve (const UT_Vector3T< S > &b, UT_Vector3T< S > &result) const
 
template<typename S >
int solveTranspose (T cx, T cy, T cz, UT_Vector3T< S > &result) const
 
template<typename S >
int solveTranspose (const UT_Vector3T< S > &b, UT_Vector3T< S > &result) const
 
template<typename S >
void changeSpace (UT_Vector3T< S > &iSrc, UT_Vector3T< S > &jSrc, UT_Vector3T< S > &iDest, UT_Vector3T< S > &jDest, int norm=1)
 
void xform (const UT_XformOrder &order, T tx=0, T ty=0, T rz=0, T sx=1, T sy=1, T px=0, T py=0, int reverse=0)
 
void xform (const UT_XformOrder &order, T tx, T ty, T rz, T sx, T sy, T s_xy, T px, T py, int reverse=0)
 
template<typename S >
void stretch (UT_Vector3T< S > &v, T amount, int norm=1)
 
template<typename S >
UT_Matrix3T< Tstretch (UT_Vector3T< S > &v, T amount, int norm=1) const
 
int isNormalized () const
 
T dot (unsigned i, unsigned j) const
 
void identity ()
 Set the matrix to identity. More...
 
void zero ()
 Set the matrix to zero. More...
 
bool isIdentity () const
 
bool isZero () const
 
unsigned hash () const
 Compute a hash. More...
 
T dot (const UT_Matrix3T< T > &m) const
 
T getEuclideanNorm () const
 
T getEuclideanNorm2 () const
 Euclidean norm squared. More...
 
T distanceSquared (const UT_Matrix3T< T > &src)
 
T getNorm1 () const
 
T getNormInf () const
 
T getNormMax () const
 
T getNormSpectral () const
 
int save (std::ostream &os, int binary) const
 
bool load (UT_IStream &is)
 
void outAsciiNoName (std::ostream &os) const
 
UT_Matrix3T< T > & operator= (const UT_Matrix4T< fpreal32 > &m)
 
UT_Matrix3T< T > & operator= (const UT_Matrix4T< fpreal64 > &m)
 
template<typename S >
void outerproductUpdateT (T b, const UT_Vector3T< S > &v1, const UT_Vector3T< S > &v2)
 
SYS_FORCE_INLINE void outerproductUpdate (T b, const UT_Vector3F &v1, const UT_Vector3F &v2)
 
SYS_FORCE_INLINE void outerproductUpdate (T b, const UT_Vector3D &v1, const UT_Vector3D &v2)
 
template<typename S >
void rotate (UT_Vector3T< S > &axis, T theta, int norm=1)
 
void rotate (UT_Axis3::axis a, T theta)
 
template<UT_Axis3::axis A>
void rotate (T theta)
 
template<typename S >
void prerotate (UT_Vector3T< S > &axis, T theta, int norm=1)
 
void prerotate (UT_Axis3::axis a, T theta)
 
template<UT_Axis3::axis A>
void prerotate (T theta)
 
void prerotate (T rx, T ry, T rz, const UT_XformOrder &order)
 
void prerotate (const UT_Vector3T< T > &rad, const UT_XformOrder &order)
 
void rotate (T rx, T ry, T rz, const UT_XformOrder &ord)
 
void rotate (const UT_Vector3T< T > &rad, const UT_XformOrder &ord)
 
void scale (T sx, T sy, T sz)
 
SYS_FORCE_INLINE void scale (const UT_Vector3T< T > &s)
 
void prescale (T sx, T sy, T sz)
 
SYS_FORCE_INLINE void prescale (const UT_Vector3T< T > &s)
 
void translate (T dx, T dy)
 
SYS_FORCE_INLINE void translate (const UT_Vector2T< T > &delta)
 
void pretranslate (T dx, T dy)
 
SYS_FORCE_INLINE void pretranslate (const UT_Vector2T< T > &delta)
 
template<typename S >
int crack (UT_Vector3T< S > &rvec, const UT_XformOrder &order) const
 
template<typename S >
int crack2D (S &r) const
 
template<typename S >
void conditionRotateT (UT_Vector3T< S > *scales)
 
void conditionRotate (UT_Vector3F *scales=0)
 
void conditionRotate (UT_Vector3D *scales)
 
template<typename S >
void extractScalesT (UT_Vector3T< S > &scales, UT_Vector3T< S > *shears)
 
void extractScales (UT_Vector3D &scales, UT_Vector3D *shears=0)
 
void extractScales (UT_Vector3F &scales, UT_Vector3F *shears=0)
 
void extractScales (UT_Vector3T< fpreal16 > &scales, UT_Vector3T< fpreal16 > *shears=0)
 
void shear (T s_xy, T s_xz, T s_yz)
 
SYS_FORCE_INLINE void shear (const UT_Vector3T< T > &sh)
 
const Tdata () const
 Return the raw matrix data. More...
 
Tdata ()
 Return the raw matrix data. More...
 
SYS_FORCE_INLINE Toperator() (unsigned row, unsigned col) noexcept
 Return a matrix entry. No bounds checking on subscripts. More...
 
SYS_FORCE_INLINE T operator() (unsigned row, unsigned col) const noexcept
 Return a matrix entry. No bounds checking on subscripts. More...
 
Toperator() (unsigned row)
 Return a matrix row. No bounds checking on subscript. More...
 
const Toperator() (unsigned row) const
 Return a matrix row. No bounds checking on subscript. More...
 
const UT_Vector3T< T > & operator[] (unsigned row) const
 Return a matrix row. No bounds checking on subscript. More...
 
UT_Vector3T< T > & operator[] (unsigned row)
 Return a matrix row. No bounds checking on subscript. More...
 
bool save (UT_JSONWriter &w) const
 
bool save (UT_JSONValue &v) const
 
bool load (UT_JSONParser &p)
 

Static Public Member Functions

static const UT_Matrix3T< T > & getIdentityMatrix ()
 
static int entries ()
 Returns the vector size. More...
 
template<typename S >
static UT_Matrix3T< TreflectMat (const UT_Vector3T< S > &plane_normal)
 
template<typename S >
static UT_Matrix3T< TrotationMat (UT_Vector3T< S > &axis, T theta, int norm=1)
 
static UT_Matrix3T< TrotationMat (UT_Axis3::axis a, T theta)
 

Static Public Attributes

static constexpr int tuple_size = 9
 

Friends

std::ostream & operator<< (std::ostream &os, const UT_Matrix3T< T > &v)
 
template<typename S >
int dihedral (UT_Vector3T< S > &a, UT_Vector3T< S > &b, int norm=1)
 
template<typename S >
static UT_Matrix3T< Tdihedral (UT_Vector3T< S > &a, UT_Vector3T< S > &b, UT_Vector3T< S > &c, int norm=1)
 
template<int ORDER>
void rotate (T rx, T ry, T rz)
 
static uint reduceExactQuarterTurns (T &angle_degrees)
 

Detailed Description

template<typename T>
class UT_Matrix3T< T >

This class implements a 3x3 float matrix in row-major order.

Most of Houdini operates with row vectors that are left-multiplied with matrices. e.g., z = v * M

This convention, combined with row-major order, is directly compatible with OpenGL matrix requirements.

Definition at line 92 of file UT_Matrix3.h.

Member Typedef Documentation

template<typename T>
typedef T UT_Matrix3T< T >::value_type

Definition at line 96 of file UT_Matrix3.h.

Constructor & Destructor Documentation

template<typename T>
SYS_FORCE_INLINE UT_Matrix3T< T >::UT_Matrix3T ( )
default

Construct uninitialized matrix.

template<typename T>
constexpr UT_Matrix3T< T >::UT_Matrix3T ( const UT_Matrix3T< T > &  )
default

Default copy constructor.

template<typename T>
constexpr UT_Matrix3T< T >::UT_Matrix3T ( UT_Matrix3T< T > &&  )
default

Default move constructor.

template<typename T>
constexpr UT_Matrix3T< T >::UT_Matrix3T ( fpreal64  val)
inlineexplicitnoexcept

Construct identity matrix, multipled by scalar.

Definition at line 109 of file UT_Matrix3.h.

template<typename T>
UT_Matrix3T< T >::UT_Matrix3T ( const UT_Matrix4T< fpreal64 > &  m)
explicit
template<typename T>
template<typename S >
UT_Matrix3T< T >::UT_Matrix3T ( const UT_SymMatrix3T< S m)
inlineexplicit

Construct from a symmetric 3x3 matrix.

Definition at line 160 of file UT_Matrix3.h.

Member Function Documentation

template<typename T>
SYS_FORCE_INLINE void UT_Matrix3T< T >::addScaledMat ( T  k,
const UT_Matrix3T< T > &  m 
)
inline

Definition at line 234 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::arbitrary180rot ( )
template<typename T>
template<typename S >
void UT_Matrix3T< T >::arbitrary180rot ( const UT_Vector3T< S > &  v)
template<typename T>
UT_SymMatrix3T<T> UT_Matrix3T< T >::averagedSymMatrix3 ( ) const
inline

Convert this to a symmetric matrix, using averaged components.

Definition at line 215 of file UT_Matrix3.h.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::changeSpace ( UT_Vector3T< S > &  iSrc,
UT_Vector3T< S > &  jSrc,
UT_Vector3T< S > &  iDest,
UT_Vector3T< S > &  jDest,
int  norm = 1 
)
template<typename T>
SYS_FORCE_INLINE T UT_Matrix3T< T >::coFactor ( int  k,
int  l 
) const
inline

Definition at line 564 of file UT_Matrix3.h.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::compose ( const UT_XformOrder order,
const UT_Vector3T< S > &  rot,
const UT_Matrix3T< T > &  stretch 
)

Composes a 3x3 transform matrix given the rotation (in radians), and stretch matrix components. This is the inverse of the decompose method.

template<typename T>
void UT_Matrix3T< T >::conditionRotate ( UT_Vector3F scales = 0)
inline

This method will condition the matrix so that it's a valid rotation matrix (i.e. crackable). Ideally, the scales should be removed first, but this method will attempt to do this as well. It will return the conditioned scales if a vector is passed in. WARNING: If you just want a rotation matrix, use makeRotationMatrix()!

Definition at line 989 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::conditionRotate ( UT_Vector3D scales)
inline

This method will condition the matrix so that it's a valid rotation matrix (i.e. crackable). Ideally, the scales should be removed first, but this method will attempt to do this as well. It will return the conditioned scales if a vector is passed in. WARNING: If you just want a rotation matrix, use makeRotationMatrix()!

Definition at line 991 of file UT_Matrix3.h.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::conditionRotateT ( UT_Vector3T< S > *  scales)

This method will condition the matrix so that it's a valid rotation matrix (i.e. crackable). Ideally, the scales should be removed first, but this method will attempt to do this as well. It will return the conditioned scales if a vector is passed in. WARNING: If you just want a rotation matrix, use makeRotationMatrix()!

template<typename T>
template<typename S >
int UT_Matrix3T< T >::crack ( UT_Vector3T< S > &  rvec,
const UT_XformOrder order 
) const

Generate the x, y, and z values of rotation in radians. Return 0 if successful, and a non-zero value otherwise: 1 if the matrix is not a valid rotation matrix, 2 if rotOrder is invalid, and 3 for other errors. rotOrder must be given as a UT_XformOrder permulation. WARNING: For animation or transform blending, use polarDecompose() or makeRotationMatrix()!

template<typename T>
template<typename S >
int UT_Matrix3T< T >::crack2D ( S r) const

Generate the x, y, and z values of rotation in radians. Return 0 if successful, and a non-zero value otherwise: 1 if the matrix is not a valid rotation matrix, 2 if rotOrder is invalid, and 3 for other errors. rotOrder must be given as a UT_XformOrder permulation. WARNING: For animation or transform blending, use polarDecompose() or makeRotationMatrix()!

template<typename T>
const T* UT_Matrix3T< T >::data ( ) const
inline

Return the raw matrix data.

Definition at line 1158 of file UT_Matrix3.h.

template<typename T>
T* UT_Matrix3T< T >::data ( )
inline

Return the raw matrix data.

Definition at line 1159 of file UT_Matrix3.h.

template<typename T>
template<typename S >
bool UT_Matrix3T< T >::decompose ( const UT_XformOrder order,
UT_Vector3T< S > &  rot,
UT_Matrix3T< T > &  stretch,
const int  max_iter = 64,
const T  rel_tol = FLT_EPSILON 
) const

Extract the rotation (in radians), and stretch components of the 3x3 matrix, preferably using polar decomposition. This method is slower than alternatives (explode, crack), but provides better results for animation.

Returns
true if the polar decomposition succeeded, false otherwise Regardless of the return value, sensible values for translation rotation and stretch are computed.
template<typename T>
T UT_Matrix3T< T >::determinant ( ) const
inline

Definition at line 578 of file UT_Matrix3.h.

template<typename T>
bool UT_Matrix3T< T >::diagonalizeSymmetric ( UT_Matrix3T< T > &  R,
UT_Matrix3T< T > &  D,
T  tol = 1e-6f,
int  maxiter = 100 
) const
template<typename T>
template<typename S >
static UT_Matrix3T<T> UT_Matrix3T< T >::dihedral ( UT_Vector3T< S > &  a,
UT_Vector3T< S > &  b,
UT_Vector3T< S > &  c,
int  norm = 1 
)
static

Compute the dihedral: return the matrix that computes the rotation around the axes normal to both a and b, (their cross product), by the angle which is between a and b. The resulting matrix maps a onto b. If a and b have the same direction, what comes out is the identity matrix. If a and b are opposed, the rotation is arbitrary180rot and the method returns a vector c of zeroes (check with !c); if all is OK, c != 0. The transformation is a symmetry around vector a, then a symmetry around (norm(a) and norm(b)). If a or b needs to be normalized, pass a non-zero value in norm. The second function places the result in *this, and returns 0 if a and b are not opposed; otherwise, it returns 1. It DOES NOT affect *this if they are opposed, so return must be checked.

template<typename T>
template<typename S >
int UT_Matrix3T< T >::dihedral ( UT_Vector3T< S > &  a,
UT_Vector3T< S > &  b,
int  norm = 1 
)
Note
If dihedral() returns 1, this matrix is NOT modified!
template<typename T>
T UT_Matrix3T< T >::distanceSquared ( const UT_Matrix3T< T > &  src)

Get the squared Euclidean distance between '*this' and 'from' Returns sum_ij(sqr(b_ij-a_ij))

template<typename T>
T UT_Matrix3T< T >::dot ( unsigned  i,
unsigned  j 
) const
inline

Definition at line 1122 of file UT_Matrix3.h.

template<typename T>
T UT_Matrix3T< T >::dot ( const UT_Matrix3T< T > &  m) const

Dot product with another matrix Does dot(a,b) = sum_ij a_ij * b_ij

template<typename T>
template<typename S >
int UT_Matrix3T< T >::eigenvalues ( UT_Vector3T< S > &  r,
UT_Vector3T< S > &  i 
) const

Computes the eigenvalues. Returns number of real eigenvalues found. Uses UT_RootFinder::cubic

Parameters
rThe real eigenvalues
iThe imaginary eigenvalues
template<typename T>
static int UT_Matrix3T< T >::entries ( )
inlinestatic

Returns the vector size.

Definition at line 1252 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::extractScales ( UT_Vector3D scales,
UT_Vector3D shears = 0 
)
inline

Extract scales and shears leaving this as an orthogonal rotation matrix using the transform order Scales * Shears * Rotate.

Note
The shears are in the order [XY, XZ, YZ] WARNING: If you just want a rotation matrix, use makeRotationMatrix()!

Definition at line 1002 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::extractScales ( UT_Vector3F scales,
UT_Vector3F shears = 0 
)
inline

Extract scales and shears leaving this as an orthogonal rotation matrix using the transform order Scales * Shears * Rotate.

Note
The shears are in the order [XY, XZ, YZ] WARNING: If you just want a rotation matrix, use makeRotationMatrix()!

Definition at line 1004 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::extractScales ( UT_Vector3T< fpreal16 > &  scales,
UT_Vector3T< fpreal16 > *  shears = 0 
)
inline

Extract scales and shears leaving this as an orthogonal rotation matrix using the transform order Scales * Shears * Rotate.

Note
The shears are in the order [XY, XZ, YZ] WARNING: If you just want a rotation matrix, use makeRotationMatrix()!

Definition at line 1006 of file UT_Matrix3.h.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::extractScales2D ( UT_Vector2T< S > &  scales,
S shears = 0 
)

Extract scales and shears leaving this as an orthogonal rotation matrix (assuming it was only a 2D xform to begin with) using the transform order Rotate * Scales * Shears. The shears are XY.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::extractScalesT ( UT_Vector3T< S > &  scales,
UT_Vector3T< S > *  shears 
)

Extract scales and shears leaving this as an orthogonal rotation matrix using the transform order Scales * Shears * Rotate.

Note
The shears are in the order [XY, XZ, YZ] WARNING: If you just want a rotation matrix, use makeRotationMatrix()!
template<typename T>
void UT_Matrix3T< T >::getBasis ( )
template<typename T>
T UT_Matrix3T< T >::getEuclideanNorm ( ) const
inline

Euclidean or Frobenius norm of a matrix. Does sqrt(sum(a_ij ^2))

Definition at line 1202 of file UT_Matrix3.h.

template<typename T>
T UT_Matrix3T< T >::getEuclideanNorm2 ( ) const

Euclidean norm squared.

template<typename T>
static const UT_Matrix3T<T>& UT_Matrix3T< T >::getIdentityMatrix ( )
static
template<typename T>
T UT_Matrix3T< T >::getNorm1 ( ) const

Get the 1-norm of this matrix, assuming a row vector convention. Returns the maximum absolute row sum. ie. max_i(sum_j(abs(a_ij)))

template<typename T>
T UT_Matrix3T< T >::getNormInf ( ) const

Get the inf-norm of this matrix, assuming a row vector convention. Returns the maximum absolute column sum. ie. max_j(sum_i(abs(a_ij)))

template<typename T>
T UT_Matrix3T< T >::getNormMax ( ) const

Get the max-norm of this matrix Returns the maximum absolute entry. ie. max_j(max_i(abs(a_ij)))

template<typename T>
T UT_Matrix3T< T >::getNormSpectral ( ) const

Get the spectral norm of this matrix Returns the maximum singular value.

template<typename T>
unsigned UT_Matrix3T< T >::hash ( void  ) const
inline

Compute a hash.

Definition at line 1163 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::identity ( )
inline

Set the matrix to identity.

Definition at line 1128 of file UT_Matrix3.h.

template<typename T>
int UT_Matrix3T< T >::invert ( )

Invert this matrix and return 0 if OK, 1 if singular. If singular, the matrix will be in an undefined state.

template<typename T>
int UT_Matrix3T< T >::invert ( UT_Matrix3T< T > &  m) const

Invert the matrix and return 0 if OK, 1 if singular. Puts the inverted matrix in m, and leaves this matrix unchanged. If singular, the inverted matrix will be in an undefined state.

template<typename T>
int UT_Matrix3T< T >::invertKramer ( UT_Matrix3T< T > &  m,
T  abs_det_threshold = FLT_EPSILON 
) const

Use Kramer's method to compute the matrix inverse If abs( det(m) ) <= abs_det_threshold, then return 1 without changing m Otherwise, return 0, storing the inverse matrix in m

NOTE: The default FLT_EPSILON is kept here to preserve existing behavior This is not a good default! The right threshold must be decided separately for each use case.

template<typename T>
int UT_Matrix3T< T >::invertKramer ( T  abs_det_threshold = FLT_EPSILON)
template<typename T>
bool UT_Matrix3T< T >::isAlmostEqual ( const UT_Matrix3T< T > &  m,
int  ulps = 50 
) const
inline

Definition at line 684 of file UT_Matrix3.h.

template<typename T>
bool UT_Matrix3T< T >::isEqual ( const UT_Matrix3T< T > &  m,
T  tolerance = T(SYS_FTOLERANCE) 
) const
inline

Check for equality within a tolerance level.

Definition at line 668 of file UT_Matrix3.h.

template<typename T>
bool UT_Matrix3T< T >::isIdentity ( ) const
inline

Definition at line 1132 of file UT_Matrix3.h.

template<typename T>
bool UT_Matrix3T< T >::isLowerTriangular ( T  tolerance = T(SYS_FTOLERANCE)) const
inline

Check for lower triangular within a tolerance level to 0.

Definition at line 703 of file UT_Matrix3.h.

template<typename T>
int UT_Matrix3T< T >::isNormalized ( ) const
template<typename T>
bool UT_Matrix3T< T >::isSymmetric ( T  tolerance = T(SYS_FTOLERANCE)) const
template<typename T>
bool UT_Matrix3T< T >::isZero ( ) const
inline

Definition at line 1144 of file UT_Matrix3.h.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::leftMult ( const UT_SymMatrix3T< S > &  m)
inline

Multiply given symmetric matrix on the left.

Definition at line 330 of file UT_Matrix3.h.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::leftMult ( const UT_Matrix3T< S > &  m)
inline

Multiply given matrix3 on the left.

Definition at line 355 of file UT_Matrix3.h.

template<typename T>
bool UT_Matrix3T< T >::load ( UT_IStream is)
template<typename T>
bool UT_Matrix3T< T >::load ( UT_JSONParser p)

Methods to serialize to a JSON stream. The matrix is stored as an array of 9 reals.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::lookat ( const UT_Vector3T< S > &  from,
const UT_Vector3T< S > &  to,
T  roll = 0 
)
template<typename T>
template<typename S >
void UT_Matrix3T< T >::lookat ( const UT_Vector3T< S > &  from,
const UT_Vector3T< S > &  to,
const UT_Vector3T< S > &  up 
)
template<typename T>
UT_SymMatrix3T<T> UT_Matrix3T< T >::lowerTriangularSymMatrix3 ( ) const
inline

Convert this to a symmetric matrix, using the lower-triangular portion.

Definition at line 199 of file UT_Matrix3.h.

template<typename T>
bool UT_Matrix3T< T >::makeRotationMatrix ( UT_Matrix3T< T > *  stretch = nullptr,
bool  reverse = true,
const int  max_iter = 64,
const T  rel_tol = FLT_EPSILON 
)

Turn this matrix into the "closest" rotation matrix.

It uses polarDecompose and then negates the matrix and stretch if there is a negative determinant (scale). It returns false iff polarDecompose failed, possibly due to a singular matrix.

This is currently the one true way to turn an arbitrary matrix into a rotation matrix. If that ever changes, put a warning here, and you may want to update UT_Matrix4::makeRigidMatrix too.

template<typename T>
void UT_Matrix3T< T >::multiply3 ( const UT_Matrix4 m)
template<typename T>
void UT_Matrix3T< T >::multiply3 ( const UT_DMatrix4 m)
template<typename T>
SYS_FORCE_INLINE void UT_Matrix3T< T >::negate ( )
inline

Negates this matrix, i.e. multiplies it by -1.

Definition at line 879 of file UT_Matrix3.h.

template<typename T>
constexpr bool UT_Matrix3T< T >::operator!= ( const UT_Matrix3T< T > &  m) const
inlinenoexcept

Definition at line 385 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE T& UT_Matrix3T< T >::operator() ( unsigned  row,
unsigned  col 
)
inlinenoexcept

Return a matrix entry. No bounds checking on subscripts.

Definition at line 1167 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE T UT_Matrix3T< T >::operator() ( unsigned  row,
unsigned  col 
) const
inlinenoexcept

Return a matrix entry. No bounds checking on subscripts.

Definition at line 1173 of file UT_Matrix3.h.

template<typename T>
T* UT_Matrix3T< T >::operator() ( unsigned  row)
inline

Return a matrix row. No bounds checking on subscript.

Definition at line 1182 of file UT_Matrix3.h.

template<typename T>
const T* UT_Matrix3T< T >::operator() ( unsigned  row) const
inline

Return a matrix row. No bounds checking on subscript.

Definition at line 1187 of file UT_Matrix3.h.

template<typename T>
UT_Matrix3T<T>& UT_Matrix3T< T >::operator*= ( const UT_Matrix3T< T > &  m)
inline

Definition at line 281 of file UT_Matrix3.h.

template<typename T>
template<typename S >
UT_Matrix3T<T>& UT_Matrix3T< T >::operator*= ( const UT_SymMatrix3T< S > &  m)
inline

Multiply given symmetric matrix on the right.

Definition at line 303 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE UT_Matrix3T<T>& UT_Matrix3T< T >::operator*= ( T  scalar)
inline

Definition at line 399 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE UT_Matrix3T<T>& UT_Matrix3T< T >::operator+= ( const UT_Matrix3T< T > &  m)
inline

Definition at line 249 of file UT_Matrix3.h.

template<typename T >
template<typename S >
UT_Matrix3T< T > & UT_Matrix3T< T >::operator+= ( const UT_Vector3T< S > &  vec)
inline

Definition at line 1326 of file UT_Matrix3.h.

template<typename T>
UT_Matrix3T<T> UT_Matrix3T< T >::operator- ( ) const
inline

Definition at line 225 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE UT_Matrix3T<T>& UT_Matrix3T< T >::operator-= ( const UT_Matrix3T< T > &  m)
inline

Definition at line 265 of file UT_Matrix3.h.

template<typename T >
template<typename S >
UT_Matrix3T< T > & UT_Matrix3T< T >::operator-= ( const UT_Vector3T< S > &  vec)
inline

Definition at line 1338 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE UT_Matrix3T<T>& UT_Matrix3T< T >::operator/= ( T  scalar)
inline

Definition at line 407 of file UT_Matrix3.h.

template<typename T>
UT_Matrix3T<T>& UT_Matrix3T< T >::operator= ( const UT_Matrix3T< T > &  m)
default

Default copy assignment operator.

template<typename T>
UT_Matrix3T<T>& UT_Matrix3T< T >::operator= ( UT_Matrix3T< T > &&  m)
default

Default move assignment operator.

template<typename T>
UT_Matrix3T<T>& UT_Matrix3T< T >::operator= ( const UT_Matrix4T< fpreal32 > &  m)

Conversion operator that returns a 3x3 from a 4x4 matrix by ignoring the last row and last column.

template<typename T>
UT_Matrix3T<T>& UT_Matrix3T< T >::operator= ( const UT_Matrix4T< fpreal64 > &  m)

Conversion operator that returns a 3x3 from a 4x4 matrix by ignoring the last row and last column.

template<typename T>
template<typename S >
UT_Matrix3T<T>& UT_Matrix3T< T >::operator= ( const UT_Matrix3T< S > &  m)
inlinenoexcept

Definition at line 178 of file UT_Matrix3.h.

template<typename T>
template<typename S >
UT_Matrix3T<T>& UT_Matrix3T< T >::operator= ( const UT_SymMatrix3T< S > &  m)
inline

Convert from a symmetric matrix to non-symmetric.

Definition at line 188 of file UT_Matrix3.h.

template<typename T>
UT_Matrix3T<T>& UT_Matrix3T< T >::operator= ( T  val)
inline

Definition at line 391 of file UT_Matrix3.h.

template<typename T >
template<typename S >
UT_Matrix3T< T > & UT_Matrix3T< T >::operator= ( const UT_Vector3T< S > &  vec)
inline

Definition at line 1315 of file UT_Matrix3.h.

template<typename T>
constexpr bool UT_Matrix3T< T >::operator== ( const UT_Matrix3T< T > &  m) const
inlinenoexcept

Definition at line 378 of file UT_Matrix3.h.

template<typename T >
const UT_Vector3T< T > & UT_Matrix3T< T >::operator[] ( unsigned  row) const
inline

Return a matrix row. No bounds checking on subscript.

Definition at line 1452 of file UT_Matrix3.h.

template<typename T >
UT_Vector3T< T > & UT_Matrix3T< T >::operator[] ( unsigned  row)
inline

Return a matrix row. No bounds checking on subscript.

Definition at line 1460 of file UT_Matrix3.h.

template<typename T>
template<typename S >
int UT_Matrix3T< T >::orient ( UT_Vector3T< S > &  dir,
UT_Vector3T< S > &  up,
int  norm = 1 
)
template<typename T>
void UT_Matrix3T< T >::orient ( const UT_Vector3F v,
T  pscale,
const UT_Vector3F s3,
const UT_Vector3F up,
const UT_QuaternionF q 
)
inline

Definition at line 534 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::orient ( const UT_Vector3D v,
T  pscale,
const UT_Vector3D s3,
const UT_Vector3D up,
const UT_QuaternionD q 
)
inline

Definition at line 539 of file UT_Matrix3.h.

template<typename T>
template<typename S >
int UT_Matrix3T< T >::orientInverse ( UT_Vector3T< S > &  dir,
UT_Vector3T< S > &  up,
int  norm = 1 
)
template<typename T>
void UT_Matrix3T< T >::orientInverse ( const UT_Vector3F v,
T  pscale,
const UT_Vector3F s3,
const UT_Vector3F up,
const UT_QuaternionF q 
)
inline

Definition at line 549 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::orientInverse ( const UT_Vector3D v,
T  pscale,
const UT_Vector3D s3,
const UT_Vector3D up,
const UT_QuaternionD q 
)
inline

Definition at line 554 of file UT_Matrix3.h.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::orientInverseT ( const UT_Vector3T< S > &  v,
T  pscale,
const UT_Vector3T< S > *  s3,
const UT_Vector3T< S > *  up,
const UT_QuaternionT< S > *  q 
)
template<typename T>
template<typename S >
void UT_Matrix3T< T >::orientT ( const UT_Vector3T< S > &  v,
T  pscale,
const UT_Vector3T< S > *  s3,
const UT_Vector3T< S > *  up,
const UT_QuaternionT< S > *  q 
)
template<typename T>
void UT_Matrix3T< T >::outAsciiNoName ( std::ostream &  os) const
template<typename T>
SYS_FORCE_INLINE void UT_Matrix3T< T >::outerproductUpdate ( T  b,
const UT_Vector3F v1,
const UT_Vector3F v2 
)
inline

Scaled outer product update (given scalar b, row vectors v1 and v2) this += b * transpose(v1) * v2

Definition at line 428 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE void UT_Matrix3T< T >::outerproductUpdate ( T  b,
const UT_Vector3D v1,
const UT_Vector3D v2 
)
inline

Scaled outer product update (given scalar b, row vectors v1 and v2) this += b * transpose(v1) * v2

Definition at line 433 of file UT_Matrix3.h.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::outerproductUpdateT ( T  b,
const UT_Vector3T< S > &  v1,
const UT_Vector3T< S > &  v2 
)
inline

Scaled outer product update (given scalar b, row vectors v1 and v2) this += b * transpose(v1) * v2

Definition at line 1431 of file UT_Matrix3.h.

template<typename T>
bool UT_Matrix3T< T >::polarDecompose ( UT_Matrix3T< T > *  stretch = nullptr,
bool  reverse = true,
const int  max_iter = 64,
const T  rel_tol = FLT_EPSILON 
)

Perform the polar decomposition M into an orthogonal matrix Q and an symmetric positive-semidefinite matrix S. This is more useful than crack() or conditionRotate() when the desire is to blend transforms. By default, it gives M=SQ, a left polar decomposition. If reverse is false, then it gives M=QS, a right polar decomposition.

Precondition
*this is non-singular
Postcondition
*this = Q, and if stretch != 0: *stretch = S
Returns
True if successful
template<typename T>
template<typename S >
void UT_Matrix3T< T >::prerotate ( UT_Vector3T< S > &  axis,
T  theta,
int  norm = 1 
)

Pre-multiply this matrix by the theta radians rotation around the axis

template<typename T>
void UT_Matrix3T< T >::prerotate ( UT_Axis3::axis  a,
T  theta 
)

Pre-multiply this matrix by the theta radians rotation around the axis

template<typename T>
template<UT_Axis3::axis A>
void UT_Matrix3T< T >::prerotate ( T  theta)

Pre-multiply this matrix by the theta radians rotation around the axis

template<typename T>
void UT_Matrix3T< T >::prerotate ( T  rx,
T  ry,
T  rz,
const UT_XformOrder order 
)

Pre-rotate by rx, ry, rz radians around the three basic axes in the order given by UT_XformOrder.

template<typename T>
void UT_Matrix3T< T >::prerotate ( const UT_Vector3T< T > &  rad,
const UT_XformOrder order 
)
inline

Pre-rotate by rx, ry, rz radians around the three basic axes in the order given by UT_XformOrder.

Definition at line 838 of file UT_Matrix3.h.

template<typename T>
template<UT_Axis3::axis A>
SYS_FORCE_INLINE void UT_Matrix3T< T >::prerotateHalf ( )
inline

Pre-multiply this matrix by a 3x3 rotation matrix (on the left) for a half turn (180 degrees) around the specified axis

Definition at line 822 of file UT_Matrix3.h.

template<typename T>
template<UT_Axis3::axis A, bool reverse = false>
SYS_FORCE_INLINE void UT_Matrix3T< T >::prerotateQuarter ( )
inline

Pre-multiply this matrix by a 3x3 rotation matrix (on the left) for a quarter turn (90 degrees) around the specified axis

Definition at line 796 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::prescale ( T  sx,
T  sy,
T  sz 
)
inline

Pre-multiply this matrix by a scale matrix with diagonal (sx, sy, sz)

Definition at line 867 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE void UT_Matrix3T< T >::prescale ( const UT_Vector3T< T > &  s)
inline

Pre-multiply this matrix by a scale matrix with diagonal (sx, sy, sz)

Definition at line 874 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::pretranslate ( T  dx,
T  dy 
)
inline

Pre-multiply this matrix by the translation matrix determined by (dx,dy)

Definition at line 904 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE void UT_Matrix3T< T >::pretranslate ( const UT_Vector2T< T > &  delta)
inline

Pre-multiply this matrix by the translation matrix determined by (dx,dy)

Definition at line 911 of file UT_Matrix3.h.

template<typename T>
static uint UT_Matrix3T< T >::reduceExactQuarterTurns ( T angle_degrees)
static

If angle_degrees is an exact multiple of 90, it is changed to 0, and the quarter turn number (0-3) is returned. If angle_degrees is not an exact multiple of 90, it is left unchanged, and 0 is returned.

template<typename T>
template<typename S >
static UT_Matrix3T<T> UT_Matrix3T< T >::reflectMat ( const UT_Vector3T< S > &  plane_normal)
inlinestatic

Create a reflection matrix for the given normal to the mirror plane. 'plane_normal' should be normalized.

Definition at line 443 of file UT_Matrix3.h.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::rightExtractScales ( UT_Vector3T< S > &  scales,
UT_Vector3T< S > *  shears = nullptr 
)

Extract scales and shears leaving this as an orthogonal rotation matrix using the transform order Rotate * Scales * Shears.

Note
The shears are in the order [XY, XZ, YZ] WARNING: If you just want a rotation matrix, use makeRotationMatrix()!
template<typename T>
template<typename S >
void UT_Matrix3T< T >::rightExtractScales2D ( UT_Vector2T< S > &  scales,
S shears = nullptr 
)

Extract scales and shears leaving this as an orthogonal rotation matrix (assuming it was only a 2D xform to begin with) using the transform order Scales * Shears * Rotate. The shears are XY.

template<typename T>
template<typename S >
void UT_Matrix3T< T >::rotate ( UT_Vector3T< S > &  axis,
T  theta,
int  norm = 1 
)

Post-multiply this matrix by a 3x3 rotation matrix determined by the axis and angle of rotation in radians. If 'norm' is not 0, the axis vector is normalized before computing the rotation matrix. rotationMat() returns a rotation matrix, and could as well be defined as a free floating function.

template<typename T>
void UT_Matrix3T< T >::rotate ( UT_Axis3::axis  a,
T  theta 
)

Post-multiply this matrix by a 3x3 rotation matrix determined by the axis and angle of rotation in radians. If 'norm' is not 0, the axis vector is normalized before computing the rotation matrix. rotationMat() returns a rotation matrix, and could as well be defined as a free floating function.

template<typename T>
template<UT_Axis3::axis A>
void UT_Matrix3T< T >::rotate ( T  theta)

Post-multiply this matrix by a 3x3 rotation matrix determined by the axis and angle of rotation in radians. If 'norm' is not 0, the axis vector is normalized before computing the rotation matrix. rotationMat() returns a rotation matrix, and could as well be defined as a free floating function.

template<typename T>
void UT_Matrix3T< T >::rotate ( T  rx,
T  ry,
T  rz,
const UT_XformOrder ord 
)

Post-rotate by rx, ry, rz radians around the three basic axes in the order given by UT_XformOrder.

template<typename T>
void UT_Matrix3T< T >::rotate ( const UT_Vector3T< T > &  rad,
const UT_XformOrder ord 
)
inline

Post-rotate by rx, ry, rz radians around the three basic axes in the order given by UT_XformOrder.

Definition at line 848 of file UT_Matrix3.h.

template<typename T>
template<int ORDER>
void UT_Matrix3T< T >::rotate ( T  rx,
T  ry,
T  rz 
)

Post-rotate by rx, ry, rz radians around the three basic axes in the order given by a templated UT_XformOrder.

Definition at line 1736 of file UT_Matrix3.h.

template<typename T>
template<UT_Axis3::axis A>
SYS_FORCE_INLINE void UT_Matrix3T< T >::rotateHalf ( )
inline

Post-multiply this matrix by a 3x3 rotation matrix (on the right) for a half turn (180 degrees) around the specified axis

Definition at line 749 of file UT_Matrix3.h.

template<typename T>
template<UT_Axis3::axis A, bool reverse = false>
SYS_FORCE_INLINE void UT_Matrix3T< T >::rotateQuarter ( )
inline

Post-multiply this matrix by a 3x3 rotation matrix (on the right) for a quarter turn (90 degrees) around the specified axis

Definition at line 726 of file UT_Matrix3.h.

template<typename T>
template<UT_Axis3::axis A>
SYS_FORCE_INLINE void UT_Matrix3T< T >::rotateWithQTurns ( T  theta,
uint  qturns 
)
inline

This is just a helper function for code handling quarter turns exactly. NOTE: theta is in radians already, not degrees!

Definition at line 764 of file UT_Matrix3.h.

template<typename T>
template<typename S >
static UT_Matrix3T<T> UT_Matrix3T< T >::rotationMat ( UT_Vector3T< S > &  axis,
T  theta,
int  norm = 1 
)
static

Create a rotation matrix for the given angle in radians around the axis

template<typename T>
static UT_Matrix3T<T> UT_Matrix3T< T >::rotationMat ( UT_Axis3::axis  a,
T  theta 
)
static

Create a rotation matrix for the given angle in radians around the axis

template<typename T>
int UT_Matrix3T< T >::safeInvertSymmetric ( T  tol = 1e-6f)
template<typename T>
int UT_Matrix3T< T >::save ( std::ostream &  os,
int  binary 
) const
template<typename T>
bool UT_Matrix3T< T >::save ( UT_JSONWriter w) const

Methods to serialize to a JSON stream. The matrix is stored as an array of 9 reals.

template<typename T>
bool UT_Matrix3T< T >::save ( UT_JSONValue v) const

Methods to serialize to a JSON stream. The matrix is stored as an array of 9 reals.

template<typename T>
void UT_Matrix3T< T >::scale ( T  sx,
T  sy,
T  sz 
)
inline

Post-multiply this matrix by a scale matrix with diagonal (sx, sy, sz)

Definition at line 854 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE void UT_Matrix3T< T >::scale ( const UT_Vector3T< T > &  s)
inline

Post-multiply this matrix by a scale matrix with diagonal (sx, sy, sz)

Definition at line 861 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::shear ( T  s_xy,
T  s_xz,
T  s_yz 
)
inline

Post-multiply this matrix by the shear matrix formed by (sxy, sxz, syz)

Definition at line 1040 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE void UT_Matrix3T< T >::shear ( const UT_Vector3T< T > &  sh)
inline

Post-multiply this matrix by the shear matrix formed by (sxy, sxz, syz)

Definition at line 1052 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::shearXY ( T  val)
template<typename T>
void UT_Matrix3T< T >::shearXZ ( T  val)
template<typename T>
void UT_Matrix3T< T >::shearYZ ( T  val)
template<typename T>
template<typename S >
int UT_Matrix3T< T >::solve ( T  cx,
T  cy,
T  cz,
UT_Vector3T< S > &  result 
) const
template<typename T>
template<typename S >
int UT_Matrix3T< T >::solve ( const UT_Vector3T< S > &  b,
UT_Vector3T< S > &  result 
) const
template<typename T>
template<typename S >
int UT_Matrix3T< T >::solveTranspose ( T  cx,
T  cy,
T  cz,
UT_Vector3T< S > &  result 
) const
template<typename T>
template<typename S >
int UT_Matrix3T< T >::solveTranspose ( const UT_Vector3T< S > &  b,
UT_Vector3T< S > &  result 
) const
template<typename T>
void UT_Matrix3T< T >::splitCovarianceToRotationScale ( UT_Matrix3T< T > &  R,
UT_Matrix3T< T > &  S,
T  tol = 1e-6f 
) const

Splits a covariance matrix into a scale & rotation component. This should be built by a series of outer product updates. R is the rotation component, S the inverse scale. If this is A, finds the inverse square root of AtA, S. We then set R = transpose(AS) to give us a rotation matrix. NOTE: For general matrices, use makeRotationMatrix()!

template<typename T>
template<typename S >
void UT_Matrix3T< T >::stretch ( UT_Vector3T< S > &  v,
T  amount,
int  norm = 1 
)
template<typename T>
template<typename S >
UT_Matrix3T<T> UT_Matrix3T< T >::stretch ( UT_Vector3T< S > &  v,
T  amount,
int  norm = 1 
) const
template<typename T>
void UT_Matrix3T< T >::svdDecomposition ( UT_Matrix3T< T > &  U,
UT_Matrix3T< T > &  S,
UT_Matrix3T< T > &  V,
T  tol = 1e-6f 
) const
template<typename T>
T UT_Matrix3T< T >::trace ( ) const
inline

Definition at line 584 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::translate ( T  dx,
T  dy 
)
inline

Post-multiply this matrix by a translation matrix determined by (dx,dy)

Definition at line 888 of file UT_Matrix3.h.

template<typename T>
SYS_FORCE_INLINE void UT_Matrix3T< T >::translate ( const UT_Vector2T< T > &  delta)
inline

Post-multiply this matrix by a translation matrix determined by (dx,dy)

Definition at line 898 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::transpose ( )
inline

Definition at line 653 of file UT_Matrix3.h.

template<typename T>
UT_Matrix3T<T> UT_Matrix3T< T >::transposedCopy ( ) const
inline

Definition at line 660 of file UT_Matrix3.h.

template<typename T>
UT_SymMatrix3T<T> UT_Matrix3T< T >::upperTriangularSymMatrix3 ( ) const
inline

Convert this to a symmetric matrix, using the upper-triangular portion.

Definition at line 207 of file UT_Matrix3.h.

template<typename T>
void UT_Matrix3T< T >::xform ( const UT_XformOrder order,
T  tx = 0,
T  ty = 0,
T  rz = 0,
T  sx = 1,
T  sy = 1,
T  px = 0,
T  py = 0,
int  reverse = 0 
)
template<typename T>
void UT_Matrix3T< T >::xform ( const UT_XformOrder order,
T  tx,
T  ty,
T  rz,
T  sx,
T  sy,
T  s_xy,
T  px,
T  py,
int  reverse = 0 
)
template<typename T>
void UT_Matrix3T< T >::zero ( )
inline

Set the matrix to zero.

Definition at line 1130 of file UT_Matrix3.h.

Friends And Related Function Documentation

template<typename T>
std::ostream& operator<< ( std::ostream &  os,
const UT_Matrix3T< T > &  v 
)
friend

Definition at line 1236 of file UT_Matrix3.h.

Member Data Documentation

template<typename T>
T UT_Matrix3T< T >::matx[3][3]

Definition at line 1300 of file UT_Matrix3.h.

template<typename T>
T UT_Matrix3T< T >::myFloats[tuple_size]

Definition at line 1301 of file UT_Matrix3.h.

template<typename T>
constexpr int UT_Matrix3T< T >::tuple_size = 9
static

Definition at line 97 of file UT_Matrix3.h.


The documentation for this class was generated from the following file: