Files Class List
Matrix3< TYPE > Class Template Reference

Detailed Description

template<typename TYPE>
class cy::Matrix3< TYPE >

3x3 matrix class.

Its data stores 9-value array of column-major matrix elements. You can use Matrix3 with Point3<TYPE> to transform 3D points.

#include <cyMatrix.h>

Public Member Functions

Constructors
 Matrix3 ()
 
 Matrix3 (const Matrix3 &matrix)
 
template<typename T >
 Matrix3 (const Matrix3< T > &matrix)
 
 Matrix3 (const TYPE *values)
 
 Matrix3 (const TYPE &v)
 
 Matrix3 (const Point3< TYPE > &x, const Point3< TYPE > &y, const Point3< TYPE > &z)
 
 Matrix3 (const Matrix2< TYPE > &m)
 
 Matrix3 (const Matrix34< TYPE > &m)
 
 Matrix3 (const Matrix4< TYPE > &m)
 
 Matrix3 (const TYPE &row0col0, const TYPE &row0col1, const TYPE &row0col2, const TYPE &row1col0, const TYPE &row1col1, const TYPE &row1col2, const TYPE &row2col0, const TYPE &row2col1, const TYPE &row2col2)
 
Set & Get Methods
void Zero ()
 
bool IsZero () const
 
void Get (TYPE *values)
 
void Set (const TYPE *values)
 
void Set (const Point3< TYPE > &x, const Point3< TYPE > &y, const Point3< TYPE > &z)
 
void SetIdentity ()
 
void SetScaledIdentity (TYPE v)
 
void SetTensorProduct (const Point3< TYPE > &v0, const Point3< TYPE > &v1)
 
void SetCrossProd (const Point3< TYPE > &p)
 
Affine transformations
void SetScale (const TYPE &uniformScale)
 
void SetScale (const TYPE &scaleX, const TYPE &scaleY, const TYPE &scaleZ)
 
void SetScale (const Point3< TYPE > &scale)
 
void SetNoScale ()
 
void SetRotationX (TYPE angle)
 
void SetRotationX (TYPE sinAngle, TYPE cosAngle)
 
void SetRotationY (TYPE angle)
 
void SetRotationY (TYPE sinAngle, TYPE cosAngle)
 
void SetRotationZ (TYPE angle)
 
void SetRotationZ (TYPE sinAngle, TYPE cosAngle)
 
void SetRotationXYZ (TYPE angleX, TYPE angleY, TYPE angleZ)
 
void SetRotationZYX (TYPE angleX, TYPE angleY, TYPE angleZ)
 
void SetRotation (const Point3< TYPE > &axis, TYPE angle)
 
void SetRotation (const Point3< TYPE > &axis, TYPE sinAngle, TYPE cosAngle)
 
void SetRotation (const Point3< TYPE > &from, const Point3< TYPE > &to)
 
void SetView (const Point3< TYPE > &target, const Point3< TYPE > &up)
 
void SetNormal (const Point3< TYPE > &normal, const Point3< TYPE > &dir)
 
Set Row, Column, or Diagonal
void SetRow (int row, TYPE x, TYPE y, TYPE z)
 
void SetColumn (int column, TYPE x, TYPE y, TYPE z)
 
void SetDiagonal (const TYPE &xx, const TYPE &yy, const TYPE &zz)
 
void SetDiagonal (const Point3< TYPE > &p)
 
void SetDiagonal (const TYPE *values)
 
Get Row, Column, or Diagonal
Point3< TYPE > GetRow (int row) const
 
void GetRow (int row, Point3< TYPE > &p) const
 
void GetRow (int row, TYPE *values) const
 
Point3< TYPE > GetColumn (int col) const
 
void GetColumn (int col, Point3< TYPE > &p) const
 
void GetColumn (int col, TYPE *values) const
 
Point3< TYPE > GetDiagonal () const
 
void GetDiagonal (Point3< TYPE > &p) const
 
void GetDiagonal (TYPE *values) const
 
Get Sub-matrix data
void GetSubMatrix (Matrix2< TYPE > &m) const
 
Matrix2< TYPE > GetSubMatrix2 () const
 
void GetSubMatrix2 (Matrix2< TYPE > &m) const
 
void GetSubMatrix2 (TYPE *mdata) const
 
Comparison Operators
bool operator== (const Matrix3 &right) const
 
bool operator!= (const Matrix3 &right) const
 
Access Operators
TYPE & operator() (int row, int column)
 
const TYPE & operator() (int row, int column) const
 
TYPE & operator[] (int i)
 
const TYPE & operator[] (int i) const
 
Unary and Binary Operators
Matrix3 operator- () const
 
Matrix3 operator* (const TYPE &value) const
 
Matrix3 operator/ (const TYPE &value) const
 
Matrix3 operator+ (const Matrix3 &right) const
 
Matrix3 operator- (const Matrix3 &right) const
 
Matrix3 operator* (const Matrix3 &right) const
 
Point3< TYPE > operator* (const Point3< TYPE > &p) const
 
Assignment Operators
const Matrix3operator= (const Matrix3 &right)
 
const Matrix3operator*= (const Matrix3 &right)
 
const Matrix3operator+= (const Matrix3 &right)
 
const Matrix3operator-= (const Matrix3 &right)
 
const Matrix3operator*= (const TYPE &value)
 
const Matrix3operator/= (const TYPE &value)
 
Other Methods
void Transpose ()
 
void GetTranspose (Matrix3 &m) const
 
Matrix3 GetTranspose () const
 
Point3< TYPE > TransposeMult (const Point3< TYPE > &p) const
 
TYPE GetDeterminant () const
 
void Invert ()
 
void GetInverse (Matrix3 &inverse) const
 
Matrix3 GetInverse () const
 
void OrthogonalizeX ()
 
void OrthogonalizeY ()
 
void OrthogonalizeZ ()
 
bool IsIdentity (TYPE tollerance=TYPE(0.001)) const
 
bool IsSymmetric (TYPE tollerance=TYPE(0.001)) const
 

Static Public Member Functions

Static Methods
static Matrix3 MatrixIdentity ()
 
static Matrix3 MatrixView (const Point3< TYPE > &target, Point3< TYPE > &up)
 
static Matrix3 MatrixNormal (const Point3< TYPE > &normal, Point3< TYPE > &dir)
 
static Matrix3 MatrixRotationX (TYPE angle)
 
static Matrix3 MatrixRotationY (TYPE angle)
 
static Matrix3 MatrixRotationZ (TYPE angle)
 
static Matrix3 MatrixRotationXYZ (TYPE angleX, TYPE angleY, TYPE angleZ)
 
static Matrix3 MatrixRotationZYX (TYPE angleX, TYPE angleY, TYPE angleZ)
 
static Matrix3 MatrixRotation (const Point3< TYPE > &axis, TYPE angle)
 
static Matrix3 MatrixRotation (const Point3< TYPE > &from, const Point3< TYPE > &to)
 
static Matrix3 MatrixScale (const TYPE &uniformScale)
 
static Matrix3 MatrixScale (const TYPE &scaleX, const TYPE &scaleY, const TYPE &scaleZ)
 
static Matrix3 MatrixScale (const Point3< TYPE > &scale)
 
static Matrix3 MatrixCrossProd (const Point3< TYPE > &a)
 

Public Attributes

TYPE data [9]
 

Friends

Matrix3 operator* (const TYPE value, const Matrix3 &right)
 
Matrix3 Inverse (const Matrix3 &m)
 

Constructor & Destructor Documentation

§ Matrix3() [1/10]

Matrix3 ( )

Default constructor.

§ Matrix3() [2/10]

Matrix3 ( const Matrix3< TYPE > &  matrix)

Copy constructor.

§ Matrix3() [3/10]

Matrix3 ( const Matrix3< T > &  matrix)
explicit

Copy constructor for different types.

§ Matrix3() [4/10]

Matrix3 ( const TYPE *  values)
explicit

Initialize the matrix using an array of 9 values.

§ Matrix3() [5/10]

Matrix3 ( const TYPE &  v)
explicit

Initialize the matrix as identity scaled by v.

§ Matrix3() [6/10]

Matrix3 ( const Point3< TYPE > &  x,
const Point3< TYPE > &  y,
const Point3< TYPE > &  z 
)
explicit

Initialize the matrix using x,y,z vectors as columns.

§ Matrix3() [7/10]

Matrix3 ( const Matrix2< TYPE > &  m)
explicit

Default constructor.

§ Matrix3() [8/10]

Matrix3 ( const Matrix34< TYPE > &  m)
explicit

Default constructor.

§ Matrix3() [9/10]

Matrix3 ( const Matrix4< TYPE > &  m)
explicit

Default constructor.

§ Matrix3() [10/10]

Matrix3 ( const TYPE &  row0col0,
const TYPE &  row0col1,
const TYPE &  row0col2,
const TYPE &  row1col0,
const TYPE &  row1col1,
const TYPE &  row1col2,
const TYPE &  row2col0,
const TYPE &  row2col1,
const TYPE &  row2col2 
)

Constructor using row-major order for initialization.

Member Function Documentation

§ Zero()

void Zero ( )

Set all the values as zero.

§ IsZero()

bool IsZero ( ) const

Returns true if the matrix is exactly zero.

§ Get()

void Get ( TYPE *  values)

Copies the matrix data to the given values array of size 9.

§ Set() [1/2]

void Set ( const TYPE *  values)

Set matrix using an array of 9 values.

§ Set() [2/2]

void Set ( const Point3< TYPE > &  x,
const Point3< TYPE > &  y,
const Point3< TYPE > &  z 
)

Set matrix using x,y,z vectors as columns.

§ SetIdentity()

void SetIdentity ( )

Converts the matrix to an identity matrix.

§ SetScaledIdentity()

void SetScaledIdentity ( TYPE  v)

Converts the matrix to an identity matrix scaled by a scalar.

§ SetTensorProduct()

void SetTensorProduct ( const Point3< TYPE > &  v0,
const Point3< TYPE > &  v1 
)

Sets the matrix as the tensor product (outer product) of two vectors.

§ SetCrossProd()

void SetCrossProd ( const Point3< TYPE > &  p)

Matrix representation of the cross product ( a x b)

§ SetScale() [1/3]

void SetScale ( const TYPE &  uniformScale)

Sets a uniform scale matrix.

§ SetScale() [2/3]

void SetScale ( const TYPE &  scaleX,
const TYPE &  scaleY,
const TYPE &  scaleZ 
)

Sets a scale matrix.

§ SetScale() [3/3]

void SetScale ( const Point3< TYPE > &  scale)

Sets a scale matrix.

§ SetNoScale()

void SetNoScale ( )

Removes the scale component of the matrix.

§ SetRotationX() [1/2]

void SetRotationX ( TYPE  angle)

Set as rotation matrix around x axis.

§ SetRotationX() [2/2]

void SetRotationX ( TYPE  sinAngle,
TYPE  cosAngle 
)

Set as rotation matrix around x axis by cos and sin of angle.

§ SetRotationY() [1/2]

void SetRotationY ( TYPE  angle)

Set as rotation matrix around y axis.

§ SetRotationY() [2/2]

void SetRotationY ( TYPE  sinAngle,
TYPE  cosAngle 
)

Set as rotation matrix around y axis by cos and sin of angle.

§ SetRotationZ() [1/2]

void SetRotationZ ( TYPE  angle)

Set as rotation matrix around z axis.

§ SetRotationZ() [2/2]

void SetRotationZ ( TYPE  sinAngle,
TYPE  cosAngle 
)

Set as rotation matrix around z axis by cos and sin of angle.

§ SetRotationXYZ()

void SetRotationXYZ ( TYPE  angleX,
TYPE  angleY,
TYPE  angleZ 
)

Set as rotation matrix around x, y, and then z axes ( Rz * Ry * Rx )

§ SetRotationZYX()

void SetRotationZYX ( TYPE  angleX,
TYPE  angleY,
TYPE  angleZ 
)

Set as rotation matrix around z, y, and then x axes ( Rx * Ry * Rz )

§ SetRotation() [1/3]

void SetRotation ( const Point3< TYPE > &  axis,
TYPE  angle 
)

Set a rotation matrix about the given axis by angle.

§ SetRotation() [2/3]

void SetRotation ( const Point3< TYPE > &  axis,
TYPE  sinAngle,
TYPE  cosAngle 
)

Set a rotation matrix about the given axis by cos and sin of angle.

§ SetRotation() [3/3]

void SetRotation ( const Point3< TYPE > &  from,
const Point3< TYPE > &  to 
)

Set a rotation matrix that sets [from] unit vector to [to] unit vector.

§ SetView()

void SetView ( const Point3< TYPE > &  target,
const Point3< TYPE > &  up 
)

Set view matrix using position, target and approximate up vector.

§ SetNormal()

void SetNormal ( const Point3< TYPE > &  normal,
const Point3< TYPE > &  dir 
)

Set matrix using normal, and approximate x direction.

§ SetRow()

void SetRow ( int  row,
TYPE  x,
TYPE  y,
TYPE  z 
)

Sets a row of the matrix.

§ SetColumn()

void SetColumn ( int  column,
TYPE  x,
TYPE  y,
TYPE  z 
)

Sets a column of the matrix.

§ SetDiagonal() [1/3]

void SetDiagonal ( const TYPE &  xx,
const TYPE &  yy,
const TYPE &  zz 
)

Sets the diagonal values of the matrix.

§ SetDiagonal() [2/3]

void SetDiagonal ( const Point3< TYPE > &  p)

Sets the diagonal values of the matrix.

§ SetDiagonal() [3/3]

void SetDiagonal ( const TYPE *  values)

Sets the diagonal values of the matrix.

§ GetRow() [1/3]

Point3<TYPE> GetRow ( int  row) const

Returns a row of the matrix.

§ GetRow() [2/3]

void GetRow ( int  row,
Point3< TYPE > &  p 
) const

Returns a row of the matrix.

§ GetRow() [3/3]

void GetRow ( int  row,
TYPE *  values 
) const

Returns a row of the matrix.

§ GetColumn() [1/3]

Point3<TYPE> GetColumn ( int  col) const

Returns a column of the matrix.

§ GetColumn() [2/3]

void GetColumn ( int  col,
Point3< TYPE > &  p 
) const

Returns a column of the matrix.

§ GetColumn() [3/3]

void GetColumn ( int  col,
TYPE *  values 
) const

Returns a column of the matrix.

§ GetDiagonal() [1/3]

Point3<TYPE> GetDiagonal ( ) const

Returns the diagonal of the matrix.

§ GetDiagonal() [2/3]

void GetDiagonal ( Point3< TYPE > &  p) const

Returns the diagonal of the matrix.

§ GetDiagonal() [3/3]

void GetDiagonal ( TYPE *  values) const

Returns the diagonal of the matrix.

§ GetSubMatrix()

void GetSubMatrix ( Matrix2< TYPE > &  m) const

Returns the 2x2 portion of the matrix.

§ GetSubMatrix2() [1/3]

Matrix2<TYPE> GetSubMatrix2 ( ) const

Returns the 2x2 portion of the matrix.

§ GetSubMatrix2() [2/3]

void GetSubMatrix2 ( Matrix2< TYPE > &  m) const

Returns the 2x2 portion of the matrix.

§ GetSubMatrix2() [3/3]

void GetSubMatrix2 ( TYPE *  mdata) const

Returns the 2x2 portion of the matrix.

§ operator==()

bool operator== ( const Matrix3< TYPE > &  right) const

compare equal

§ operator!=()

bool operator!= ( const Matrix3< TYPE > &  right) const

compare not equal

§ operator()() [1/2]

TYPE& operator() ( int  row,
int  column 
)

subscript operator

§ operator()() [2/2]

const TYPE& operator() ( int  row,
int  column 
) const

constant subscript operator

§ operator[]() [1/2]

TYPE& operator[] ( int  i)

subscript operator

§ operator[]() [2/2]

const TYPE& operator[] ( int  i) const

constant subscript operator

§ operator-() [1/2]

Matrix3 operator- ( ) const

negative matrix

§ operator*() [1/3]

Matrix3 operator* ( const TYPE &  value) const

multiply matrix by a value

§ operator/()

Matrix3 operator/ ( const TYPE &  value) const

divide matrix by a value;

§ operator+()

Matrix3 operator+ ( const Matrix3< TYPE > &  right) const

add two Matrices

§ operator-() [2/2]

Matrix3 operator- ( const Matrix3< TYPE > &  right) const

subtract one Matrix3 from another

§ operator*() [2/3]

Matrix3 operator* ( const Matrix3< TYPE > &  right) const

< multiply a matrix with another

§ operator*() [3/3]

Point3<TYPE> operator* ( const Point3< TYPE > &  p) const

negative matrix

§ operator=()

const Matrix3& operator= ( const Matrix3< TYPE > &  right)

assignment operator

§ operator*=() [1/2]

const Matrix3& operator*= ( const Matrix3< TYPE > &  right)

multiply a matrix with another matrix and modify this matrix

§ operator+=()

const Matrix3& operator+= ( const Matrix3< TYPE > &  right)

add two Matrices modify this

§ operator-=()

const Matrix3& operator-= ( const Matrix3< TYPE > &  right)

subtract one Matrix3 from another matrix and modify this matrix

§ operator*=() [2/2]

const Matrix3& operator*= ( const TYPE &  value)

multiply a matrix with a value modify this matrix

§ operator/=()

const Matrix3& operator/= ( const TYPE &  value)

divide the matrix by a value modify the this matrix

§ Transpose()

void Transpose ( )

< return Transpose of this matrix

§ GetTranspose() [1/2]

void GetTranspose ( Matrix3< TYPE > &  m) const

< return Transpose of this matrix

§ GetTranspose() [2/2]

Matrix3 GetTranspose ( ) const

return Transpose of this matrix

§ TransposeMult()

Point3<TYPE> TransposeMult ( const Point3< TYPE > &  p) const

Multiply the give vector with the transpose of the matrix.

§ GetDeterminant()

TYPE GetDeterminant ( ) const

< Get the determinant of this matrix

§ Invert()

void Invert ( )

Invert this matrix.

§ GetInverse() [1/2]

void GetInverse ( Matrix3< TYPE > &  inverse) const

< Get the inverse of this matrix

§ GetInverse() [2/2]

Matrix3 GetInverse ( ) const

Get the inverse of this matrix.

§ OrthogonalizeX()

void OrthogonalizeX ( )

Orthogonalizes the matrix and removes the scale component, preserving the x direction.

§ OrthogonalizeY()

void OrthogonalizeY ( )

Orthogonalizes the matrix and removes the scale component, preserving the y direction.

§ OrthogonalizeZ()

void OrthogonalizeZ ( )

Orthogonalizes the matrix and removes the scale component, preserving the z direction.

§ IsIdentity()

bool IsIdentity ( TYPE  tollerance = TYPE(0.001)) const

Returns if the matrix is identity within the given error tollerance.

§ IsSymmetric()

bool IsSymmetric ( TYPE  tollerance = TYPE(0.001)) const

Returns if the matrix is symmetric within the given error tollerance.

§ MatrixIdentity()

static Matrix3 MatrixIdentity ( )
static

Returns an identity matrix.

§ MatrixView()

static Matrix3 MatrixView ( const Point3< TYPE > &  target,
Point3< TYPE > &  up 
)
static

Returns a view matrix using position, target and approximate up vector.

§ MatrixNormal()

static Matrix3 MatrixNormal ( const Point3< TYPE > &  normal,
Point3< TYPE > &  dir 
)
static

Returns a matrix using normal, and approximate x direction.

§ MatrixRotationX()

static Matrix3 MatrixRotationX ( TYPE  angle)
static

Returns a rotation matrix around x axis by angle in radians.

§ MatrixRotationY()

static Matrix3 MatrixRotationY ( TYPE  angle)
static

Returns a rotation matrix around y axis by angle in radians.

§ MatrixRotationZ()

static Matrix3 MatrixRotationZ ( TYPE  angle)
static

Returns a rotation matrix around z axis by angle in radians.

§ MatrixRotationXYZ()

static Matrix3 MatrixRotationXYZ ( TYPE  angleX,
TYPE  angleY,
TYPE  angleZ 
)
static

Returns a rotation matrix around x, y, and then z axes by angle in radians (Rz * Ry * Rx)

§ MatrixRotationZYX()

static Matrix3 MatrixRotationZYX ( TYPE  angleX,
TYPE  angleY,
TYPE  angleZ 
)
static

Returns a rotation matrix around z, y, and then x axes by angle in radians (Rx * Ry * Rz)

§ MatrixRotation() [1/2]

static Matrix3 MatrixRotation ( const Point3< TYPE > &  axis,
TYPE  angle 
)
static

Returns a rotation matrix about the given axis by angle in radians.

§ MatrixRotation() [2/2]

static Matrix3 MatrixRotation ( const Point3< TYPE > &  from,
const Point3< TYPE > &  to 
)
static

Returns a rotation matrix that sets [from] unit vector to [to] unit vector.

§ MatrixScale() [1/3]

static Matrix3 MatrixScale ( const TYPE &  uniformScale)
static

Returns a uniform scale matrix.

§ MatrixScale() [2/3]

static Matrix3 MatrixScale ( const TYPE &  scaleX,
const TYPE &  scaleY,
const TYPE &  scaleZ 
)
static

Returns a scale matrix.

§ MatrixScale() [3/3]

static Matrix3 MatrixScale ( const Point3< TYPE > &  scale)
static

Returns a scale matrix.

§ MatrixCrossProd()

static Matrix3 MatrixCrossProd ( const Point3< TYPE > &  a)
static

Returns the matrix representation of cross product ( a x b )

Friends And Related Function Documentation

§ operator*

Matrix3 operator* ( const TYPE  value,
const Matrix3< TYPE > &  right 
)
friend

multiply matrix by a value

§ Inverse

Matrix3 Inverse ( const Matrix3< TYPE > &  m)
friend

return the inverse of the matrix

Member Data Documentation

§ data

TYPE data[9]

Elements of the matrix are column-major:
| 0 3 6 |
| 1 4 7 |
| 2 5 8 |
.