math::matrix4 Class Reference

A 4x4 matrix. More...

#include <matrix.h>

Collaboration diagram for math::matrix4:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 matrix4 (void)
 Default Constructor.
 matrix4 (real_t d00, real_t d01, real_t d02, real_t d10, real_t d11, real_t d12, real_t d20, real_t d21, real_t d22)
 Rotation Set Constructor.
 matrix4 (real_t d00, real_t d01, real_t d02, real_t d03, real_t d10, real_t d11, real_t d12, real_t d13, real_t d20, real_t d21, real_t d22, real_t d23, real_t d30, real_t d31, real_t d32, real_t d33)
 Full Matrix Constructor.
 matrix4 (const math::matrix4 &m)
 Copy Constructor.
virtual ~matrix4 (void)
 Destructor.
math::matrix4operator= (const math::matrix4 &m)
 Assignment Operator.
 operator const real_t * (void) const
void set (real_t d00, real_t d01, real_t d02, real_t d10, real_t d11, real_t d12, real_t d20, real_t d21, real_t d22)
 Sets rotation part of matrix.
void set (real_t d00, real_t d01, real_t d02, real_t d03, real_t d10, real_t d11, real_t d12, real_t d13, real_t d20, real_t d21, real_t d22, real_t d23, real_t d30, real_t d31, real_t d32, real_t d33)
 Sets the matrix.
void set (unsigned int row, unsigned int col, real_t x)
 Set the element at row, col to x.
real_t operator() (unsigned int row, unsigned int col) const
 Get the element at row, col.
real_toperator() (unsigned int row, unsigned int col)
 Return a reference to the element at row, col.
math::vector3 operator* (const math::vector3 &v) const
 Matrix Vector Mulitplication.
math::matrix4 operator* (const math::matrix4 &rhs) const
 Matrix Multiplication.
math::matrix4 operator+ (const math::matrix4 &rhs) const
 Matrix Addition.
math::matrix4 operator- (const math::matrix4 &rhs) const
 Matrix Subtraction.
void transpose (void)
 Transposes the matrix.
void set_identity ()
 Sets the matirx to the identity matrix.
void from_angle_axis (real_t radians, const math::vector3 &axis)
 Creates a rotation matrix given around an arbitrary axis.
math::matrix4 get_inverted_rotation (void) const
 Computes the inverse of the rotation matrix.
void set_translation (const math::vector3 &trans)
 Sets the translation part of the matrix.
math::vector3 get_translation (void) const
 Returns a vector describing the translation part of the matrix.
math::vector3 get_radians (void)
 Returns the Euler angle rotation in radians.
math::vector3 get_degrees (void)
 Returns the Euler angle rotation in degrees.
void from_matrix3 (const real_t *mat)
 Sets the matrix from a 3x3 rotation matrix.
void from_matrix4 (const real_t *mat)
 Sets the matrix from a 4x4 rotation matrix.

Static Public Attributes

static const math::matrix4 IDENTITY
 The identity matrix.
static const math::matrix4 ZERO
 The zero matrix.

Protected Attributes

real_t m_data [4][4]
 Actual matrix data.

Friends

math::vector3 math::operator* (const math::vector3 &v, const math::matrix4 &m)
 Vector Matrix Mulitplication.
std::ostream & math::operator<< (std::ostream &o, const math::matrix4 &m)
 stream output operator.


Detailed Description

A 4x4 matrix.

A 4x4 matrix in row major format:

\[ \left[ \begin{array}{rrrr} a_{00}&a_{01}&a_{02}&a_{03}\\ a_{10}&a_{11}&a_{12}&a_{13}\\ a_{20}&a_{21}&a_{22}&a_{23}\\ a_{30}&a_{31}&a_{32}&a_{33} \end{array} \right] \]

Where $a_{row,col}$

Note:
Some graphics libraries like OpenGL expect matrices in column major format. To convert the matirx to column major format, call transpose() before sending the matrix to OpenGL functions such as glMultMatrix()

Definition at line 59 of file matrix.h.


Constructor & Destructor Documentation

math::matrix4::matrix4 ( real_t  d00,
real_t  d01,
real_t  d02,
real_t  d10,
real_t  d11,
real_t  d12,
real_t  d20,
real_t  d21,
real_t  d22 
)

Rotation Set Constructor.

Sets the matrix as follows:

\[ \left[ \begin{array}{rrrr} d_{00}&d_{01}&d_{02}&0\\ d_{10}&d_{11}&d_{12}&0\\ d_{20}&d_{21}&d_{22}&0\\ 0&0&0&1 \end{array} \right] \]

Definition at line 50 of file matrix.cpp.

References m_data.

math::matrix4::matrix4 ( real_t  d00,
real_t  d01,
real_t  d02,
real_t  d03,
real_t  d10,
real_t  d11,
real_t  d12,
real_t  d13,
real_t  d20,
real_t  d21,
real_t  d22,
real_t  d23,
real_t  d30,
real_t  d31,
real_t  d32,
real_t  d33 
)

Full Matrix Constructor.

Sets the matrix as follows:

\[ \left[ \begin{array}{rrrr} d_{00}&d_{01}&d_{02}&d_{03}\\ d_{10}&d_{11}&d_{12}&d_{13}\\ d_{20}&d_{21}&d_{22}&d_{23}\\ d_{30}&d_{31}&d_{32}&d_{33} \end{array} \right] \]

Definition at line 77 of file matrix.cpp.

References m_data.


Member Function Documentation

void math::matrix4::from_angle_axis ( real_t  radians,
const math::vector3 axis 
)

Creates a rotation matrix given around an arbitrary axis.

Given an axis and an angle, this method will create and set this matrix as the rotation matrix that describes the rotation around the axis by angle.

Note:
Rotations are right-handed.
Parameters:
radians A real number in radians.
axis A unit length vector describing the axis to rotate around.

Definition at line 269 of file matrix.cpp.

References m_data, math::vector3::x(), math::vector3::y(), and math::vector3::z().

void math::matrix4::from_matrix3 ( const real_t mat  ) 

Sets the matrix from a 3x3 rotation matrix.

Parameters:
mat Pointer to an real_t[ 9 ] representing a rotation matrix. Matrix is assumed to be stored in row major format.

Definition at line 388 of file matrix.cpp.

void math::matrix4::from_matrix4 ( const real_t mat  ) 

Sets the matrix from a 4x4 rotation matrix.

Parameters:
mat Pointer to an real_t[ 16 ] representing a matrix. Matrix is assumed to be stored in row major format.

Definition at line 399 of file matrix.cpp.

math::matrix4 math::matrix4::get_inverted_rotation ( void   )  const

Computes the inverse of the rotation matrix.

Inverts the rotation part of this matrix.

Note:
All translation, scaling, etc. info is lost in the matrix. This method only inverts the rotation part of the matrix.
Returns:
A new matrix containing the inverted rotation of this matrix.

Definition at line 302 of file matrix.cpp.

References math::equals(), IDENTITY, and m_data.

math::matrix4::operator const real_t * ( void   )  const [inline]

Cast operator to real_t*.

Returns:
A read-only pointer to the internal matrix data.

Definition at line 147 of file matrix.h.

References m_data.

real_t& math::matrix4::operator() ( unsigned int  row,
unsigned int  col 
) [inline]

Return a reference to the element at row, col.

Note:
abort( ) may be called if row or col is not one of 0, 1, 2, or 3.

Definition at line 217 of file matrix.h.

References m_data.

real_t math::matrix4::operator() ( unsigned int  row,
unsigned int  col 
) const [inline]

Get the element at row, col.

Note:
abort( ) may be called if row or col is not one of 0, 1, 2, or 3.

Definition at line 207 of file matrix.h.

References m_data.

math::vector3 math::matrix4::operator* ( const math::vector3 v  )  const

Matrix Vector Mulitplication.

Multiplies the matrix m by vector v. The operation is defined as:

\[ = \left[ \begin{array}{rrrr} a_{00}&a_{01}&a_{02}&a_{03}\\ a_{10}&a_{11}&a_{12}&a_{13}\\ a_{20}&a_{21}&a_{22}&a_{23}\\ a_{30}&a_{31}&a_{32}&a_{33} \end{array} \right] \left[ \begin{array}{r} x\\ y\\ z\\ 1\\ \end{array} \right] \]

Definition at line 185 of file matrix.cpp.

References m_data, math::vector3::x(), math::vector3::y(), and math::vector3::z().

void math::matrix4::set ( unsigned int  row,
unsigned int  col,
real_t  x 
) [inline]

Set the element at row, col to x.

Note:
abort( ) may be called if row or col is not one of 0, 1, 2, or 3.

Definition at line 197 of file matrix.h.

References m_data.

void math::matrix4::set ( real_t  d00,
real_t  d01,
real_t  d02,
real_t  d03,
real_t  d10,
real_t  d11,
real_t  d12,
real_t  d13,
real_t  d20,
real_t  d21,
real_t  d22,
real_t  d23,
real_t  d30,
real_t  d31,
real_t  d32,
real_t  d33 
)

Sets the matrix.

Sets the matrix as follows:

\[ \left[ \begin{array}{rrrr} d_{00}&d_{01}&d_{02}&d_{03}\\ d_{10}&d_{11}&d_{12}&d_{13}\\ d_{20}&d_{21}&d_{22}&d_{23}\\ d_{30}&d_{31}&d_{32}&d_{33} \end{array} \right] \]

Definition at line 156 of file matrix.cpp.

References m_data.

void math::matrix4::set ( real_t  d00,
real_t  d01,
real_t  d02,
real_t  d10,
real_t  d11,
real_t  d12,
real_t  d20,
real_t  d21,
real_t  d22 
)

Sets rotation part of matrix.

Sets the matrix as follows:

\[ \left[ \begin{array}{rrrr} d_{00}&d_{01}&d_{02}&0\\ d_{10}&d_{11}&d_{12}&0\\ d_{20}&d_{21}&d_{22}&0\\ 0&0&0&1 \end{array} \right] \]

Definition at line 128 of file matrix.cpp.

References m_data.

Referenced by math::quaternion::get_rotation_matrix(), and math::quaternion::get_transposed_rotation_matrix().

void math::matrix4::set_identity (  )  [inline]

Sets the matirx to the identity matrix.

Sets the matrix to:

\[ \left[ \begin{array}{rrrr} 1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1 \end{array} \right] \]

Definition at line 276 of file matrix.h.

References IDENTITY.

void math::matrix4::set_translation ( const math::vector3 trans  )  [inline]

Sets the translation part of the matrix.

Sets the matrix as follows:

\[ \left[ \begin{array}{rrrr} d_{00}&d_{01}&d_{02}&x\\ d_{10}&d_{11}&d_{12}&y\\ d_{20}&d_{21}&d_{22}&z\\ d_{30}&d_{31}&d_{32}&d_{33} \end{array} \right] \]

Note:
This method does not add to existing translations. This method sets the translation part of the matrix.
Parameters:
trans A vector describing the new translation.

Definition at line 313 of file matrix.h.

References m_data, math::vector3::x(), math::vector3::y(), and math::vector3::z().

void math::matrix4::transpose ( void   ) 

Transposes the matrix.

Sets the matrix $M$ to $M^T$.

Definition at line 243 of file matrix.cpp.

References m_data, and math::swap().


Friends And Related Function Documentation

math::vector3 math::operator* ( const math::vector3 v,
const math::matrix4 m 
) [friend]

Vector Matrix Mulitplication.

Multiplies the vector v by the matrix m. The operation is defined as:

\[ = \left[ \begin{array}{rrrr} x&y&z&1\\ \end{array} \right] \left[ \begin{array}{rrrr} a_{00}&a_{01}&a_{02}&a_{03}\\ a_{10}&a_{11}&a_{12}&a_{13}\\ a_{20}&a_{21}&a_{22}&a_{23}\\ a_{30}&a_{31}&a_{32}&a_{33} \end{array} \right] \]


Member Data Documentation

The identity matrix.

The identity matrix is defined as:

\[ \left[ \begin{array}{rrrr} 1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1 \end{array} \right] \]

Definition at line 358 of file matrix.h.

Referenced by get_inverted_rotation(), and set_identity().

The zero matrix.

The zero matrix is defined as:

\[ \left[ \begin{array}{rrrr} 0&0&0&0\\ 0&0&0&0\\ 0&0&0&0\\ 0&0&0&0 \end{array} \right] \]

Definition at line 373 of file matrix.h.


Generated on Sat Feb 21 16:38:10 2009 for Flock of Birds Library by  doxygen 1.5.7.1