Matrix4x4< T > Class Template Reference

#include <TAPsMatrix4x4.hpp>

Collaboration diagram for Matrix4x4< T >:

Collaboration graph
[legend]

List of all members.

Public Member Functions

const double * GetDataDouble () const
const float * GetDataFloat () const
const long double * GetDataLongDouble () const
GetDeterminant () const
Matrix4x4< T > GetInverse () const
Matrix3x3< T > GetMatrix3x3 () const
Matrix4x4< T > GetTranspose () const
const double * GetTransposeDataDouble () const
const float * GetTransposeDataFloat () const
const long double * GetTransposeDataLongDouble () const
Matrix4x4< T > & Inversed ()
bool IsIdentity () const
bool IsSquare () const
bool IsSymmetric () const
void MakeDiagonal (T const af[4])
void MakeDiagonal (T d)
void MakeIdentity ()
void MakeZero ()
 Matrix4x4 (Vector4< T > const &V)
 Matrix4x4 (Vector3< T > const &V)
 Matrix4x4 (Matrix3x3< T > const &M)
 Matrix4x4 (T const af[16])
 Matrix4x4 (T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T)
 Matrix4x4 (T)
 Matrix4x4 (Matrix4x4< T > const &M)
 Matrix4x4 ()
void MultLeft (Matrix4x4< T > const &M)
void MultRight (Matrix4x4< T > const &M)
 operator const T * () const
 operator T * ()
T const & operator() (int r, int c) const
T & operator() (int r, int c)
Vector4< T > operator* (Vector4< T > const &V) const
Matrix4x4< T > operator* (T s) const
Matrix4x4< T > operator* (Matrix4x4< T > const &M) const
Matrix4x4< T > & operator*= (T s)
Matrix4x4< T > & operator*= (Matrix4x4< T > const &M)
Matrix4x4< T > operator+ (Matrix4x4< T > const &M) const
Matrix4x4< T > & operator+= (Matrix4x4< T > const &M)
Matrix4x4< T > operator- (Matrix4x4< T > const &M) const
Matrix4x4< T > operator- ()
Matrix4x4< T > & operator-= (Matrix4x4< T > const &M)
Matrix4x4< T > operator/ (T s) const
Matrix4x4< T > & operator/= (T s)
Matrix4x4< T > & operator= (Matrix4x4 const &M)
T const & operator[] (int i) const
T & operator[] (int i)
void SetAllElements (T const af[16])
void SetAllElements (T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T)
void SetAllElements (T)
Matrix4x4< T > & Transposed ()
 ~Matrix4x4 ()

Static Public Member Functions

static Matrix4x4< T > CreateRotation (Vector3< T > const &V, T const angle)

Private Attributes

e [16]

Static Private Attributes

static double g_d [16]
static float g_f [16]
static long double g_ld [16]

Friends

Matrix4x4< T > operator* (T s, Matrix4x4< T > const &M)
std::ostream & operator<< (std::ostream &output, Matrix4x4< T > const &M)


Detailed Description

template<typename T>
class Matrix4x4< T >

Definition at line 24 of file TAPsMatrix4x4.hpp.


Constructor & Destructor Documentation

template<typename T>
Matrix4x4< T >::Matrix4x4 (  )  [inline]

Definition at line 26 of file TAPsMatrix4x4.cpp.

00027 {
00028     // Identity Matrix
00029     /*e0*/  e[ 1] = e[ 2] = e[ 3] = 
00030     e[ 4] = /*e5*/  e[ 6] = e[ 7] = 
00031     e[ 8] = e[ 9] /*e10*/ = e[11] = 
00032     e[12] = e[13] = e[14]  /*e15*/= Math<T>::ZERO;
00033     e[ 0] = e[ 5] = e[10] = e[15] = Math<T>::ONE;
00034 }

template<typename T>
Matrix4x4< T >::Matrix4x4 ( Matrix4x4< T > const &  M  )  [inline]

Definition at line 37 of file TAPsMatrix4x4.cpp.

00038 {
00039     e[ 0] = M.e[ 0];  e[ 1] = M.e[ 1];  e[ 2] = M.e[ 2];  e[ 3] = M.e[ 3];
00040     e[ 4] = M.e[ 4];  e[ 5] = M.e[ 5];  e[ 6] = M.e[ 6];  e[ 7] = M.e[ 7];
00041     e[ 8] = M.e[ 8];  e[ 9] = M.e[ 9];  e[10] = M.e[10];  e[11] = M.e[11];
00042     e[12] = M.e[12];  e[13] = M.e[13];  e[14] = M.e[14];  e[15] = M.e[15];
00043 }

template<typename T>
Matrix4x4< T >::Matrix4x4 ( t  )  [inline]

Definition at line 46 of file TAPsMatrix4x4.cpp.

00047 {
00048     e[ 0] = e[ 1] = e[ 2] = e[ 3] = 
00049     e[ 4] = e[ 5] = e[ 6] = e[ 7] = 
00050     e[ 8] = e[ 9] = e[10] = e[11] = 
00051     e[12] = e[13] = e[14] = e[15] = t;
00052 }

template<typename T>
Matrix4x4< T >::Matrix4x4 ( e00,
e01,
e02,
e03,
e04,
e05,
e06,
e07,
e08,
e09,
e10,
e11,
e12,
e13,
e14,
e15 
) [inline]

Definition at line 55 of file TAPsMatrix4x4.cpp.

00059 {
00060     e[ 0] = e00;  e[ 1] = e01;  e[ 2] = e02;  e[ 3] = e03;
00061     e[ 4] = e04;  e[ 5] = e05;  e[ 6] = e06;  e[ 7] = e07;
00062     e[ 8] = e08;  e[ 9] = e09;  e[10] = e10;  e[11] = e11;
00063     e[12] = e12;  e[13] = e13;  e[14] = e14;  e[15] = e15;
00064 }

template<typename T>
Matrix4x4< T >::Matrix4x4 ( T const   af[16]  )  [inline]

Definition at line 67 of file TAPsMatrix4x4.cpp.

00068 {
00069     e[ 0] = af[ 0];  e[ 1] = af[ 1];  e[ 2] = af[ 2];  e[ 3] = af[ 3];
00070     e[ 4] = af[ 4];  e[ 5] = af[ 5];  e[ 6] = af[ 6];  e[ 7] = af[ 7];
00071     e[ 8] = af[ 8];  e[ 9] = af[ 9];  e[10] = af[10];  e[11] = af[11];
00072     e[12] = af[12];  e[13] = af[13];  e[14] = af[14];  e[15] = af[15];
00073 }

template<typename T>
Matrix4x4< T >::Matrix4x4 ( Matrix3x3< T > const &  M  )  [inline]

Definition at line 76 of file TAPsMatrix4x4.cpp.

00077 {
00078     e[ 0] = M[0];  e[ 1] = M[1];  e[ 2] = M[2];  e[ 3] = 0;
00079     e[ 4] = M[3];  e[ 5] = M[4];  e[ 6] = M[5];  e[ 7] = 0;
00080     e[ 8] = M[6];  e[ 9] = M[7];  e[10] = M[8];  e[11] = 0;
00081     e[12] = 0;     e[13] = 0;     e[14] = 0;     e[15] = 1;
00082 }

template<typename T>
Matrix4x4< T >::Matrix4x4 ( Vector3< T > const &  V  )  [inline]

Definition at line 85 of file TAPsMatrix4x4.cpp.

00086 {
00087     e[ 0] = V[0];  e[ 1] = 0;     e[ 2] = 0;     e[ 3] = 0;
00088     e[ 4] = 0;     e[ 5] = V[1];  e[ 6] = 0;     e[ 7] = 0;
00089     e[ 8] = 0;     e[ 9] = 0;     e[10] = V[2];  e[11] = 0;
00090     e[12] = 0;     e[13] = 0;     e[14] = 0;     e[15] = 1;
00091 }

template<typename T>
Matrix4x4< T >::Matrix4x4 ( Vector4< T > const &  V  )  [inline]

Definition at line 94 of file TAPsMatrix4x4.cpp.

00095 {
00096     e[ 0] = V[0];  e[ 1] = 0;     e[ 2] = 0;     e[ 3] = 0;
00097     e[ 4] = 0;     e[ 5] = V[1];  e[ 6] = 0;     e[ 7] = 0;
00098     e[ 8] = 0;     e[ 9] = 0;     e[10] = V[2];  e[11] = 0;
00099     e[12] = 0;     e[13] = 0;     e[14] = 0;     e[15] = V[3];
00100 }

template<typename T>
Matrix4x4< T >::~Matrix4x4 (  )  [inline]

Definition at line 103 of file TAPsMatrix4x4.cpp.

00104 {}


Member Function Documentation

template<typename T>
Matrix4x4< T > Matrix4x4< T >::CreateRotation ( Vector3< T > const &  V,
T const   angle 
) [inline, static]

Definition at line 478 of file TAPsMatrix4x4.cpp.

00479 {
00480     assert( V.Length() );   // Vector must not be zero
00481     Matrix4x4<T> mRotation;
00482     Vector3<T> axis = V.GetUnit();
00483     T x = axis[0], y = axis[1], z = axis[2];
00484     T xx = x*x,    yy = y*y,    zz = z*z;
00485     T xy = x*y,    yz = y*z,    zx = x*z;
00486     //----------------------------------------------------------------
00487     mRotation( 0, 0 ) = xx + cos(angle)*(1 - xx);
00488     mRotation( 0, 1 ) = xy*(1 - cos(angle)) - z*sin(angle);
00489     mRotation( 0, 2 ) = zx*(1 - cos(angle)) + y*sin(angle);
00490     //----------------------------------------------------------------
00491     mRotation( 1, 0 ) = xy*(1 - cos(angle)) + z*sin(angle);
00492     mRotation( 1, 1 ) = yy + cos(angle)*(1 - yy);
00493     mRotation( 1, 2 ) = yz*(1 - cos(angle)) - x*sin(angle);
00494     //----------------------------------------------------------------
00495     mRotation( 2, 0 ) = zx*(1 - cos(angle)) - y*sin(angle);
00496     mRotation( 2, 1 ) = yz*(1 - cos(angle)) + x*sin(angle);
00497     mRotation( 2, 2 ) = zz + cos(angle)*(1 - zz);
00498     //----------------------------------------------------------------
00499     return mRotation;
00500 }

template<typename T>
const double * Matrix4x4< T >::GetDataDouble (  )  const [inline]

Definition at line 529 of file TAPsMatrix4x4.cpp.

00530 {
00531     for ( int i = 0; i < 16; ++i ) {
00532         g_d[i] = static_cast<double>( e[i] );
00533     }
00534     return g_d;
00535 }

template<typename T>
const float * Matrix4x4< T >::GetDataFloat (  )  const [inline]

Definition at line 520 of file TAPsMatrix4x4.cpp.

00521 {
00522     for ( int i = 0; i < 16; ++i ) {
00523         g_f[i] = static_cast<float>( e[i] );
00524     }
00525     return g_f;
00526 }

template<typename T>
const long double * Matrix4x4< T >::GetDataLongDouble (  )  const [inline]

Definition at line 538 of file TAPsMatrix4x4.cpp.

00539 {
00540     for ( int i = 0; i < 16; ++i ) {
00541         g_ld[i] = static_cast<long double>( e[i] );
00542     }
00543     return g_ld;
00544 }

template<typename T>
T Matrix4x4< T >::GetDeterminant (  )  const [inline]

Definition at line 301 of file TAPsMatrix4x4.cpp.

00302 {
00303     return  e[ 0] * ( e[ 5]*e[10]*e[15] - e[ 5]*e[11]*e[14] - e[ 9]*e[ 6]*e[15] + e[ 9]*e[ 7]*e[14] + e[13]*e[ 6]*e[11] - e[13]*e[ 7]*e[10] ) 
00304         +   e[ 4] * ( e[ 1]*e[11]*e[14] - e[ 1]*e[10]*e[15] + e[ 9]*e[ 2]*e[15] - e[ 9]*e[ 3]*e[14] - e[13]*e[ 2]*e[11] + e[13]*e[ 3]*e[10] ) 
00305         +   e[ 8] * ( e[ 1]*e[ 6]*e[15] - e[ 1]*e[ 7]*e[14] - e[ 5]*e[ 2]*e[15] + e[ 5]*e[ 3]*e[14] + e[13]*e[ 2]*e[ 7] - e[13]*e[ 3]*e[ 6] ) 
00306         +   e[12] * ( e[ 1]*e[ 7]*e[10] - e[ 1]*e[ 6]*e[11] + e[ 5]*e[ 2]*e[11] - e[ 5]*e[ 3]*e[10] - e[ 9]*e[ 2]*e[ 7] + e[ 9]*e[ 3]*e[ 6] );
00307 }

template<typename T>
Matrix4x4< T > Matrix4x4< T >::GetInverse (  )  const [inline]

Definition at line 270 of file TAPsMatrix4x4.cpp.

00271 {
00272     T det = GetDeterminant();
00273 
00274     if ( -Math<T>::EPSILON < det && det < Math<T>::EPSILON )
00275         return Matrix4x4( Math<T>::INFINITY );
00276 
00277     return Matrix4x4<T>(
00278         ( e[ 5]*e[10]*e[15] - e[ 5]*e[11]*e[14] - e[ 9]*e[ 6]*e[15] + e[ 9]*e[ 7]*e[14] + e[13]*e[ 6]*e[11] - e[13]*e[ 7]*e[10] ) / det, 
00279         ( e[ 1]*e[11]*e[14] - e[ 1]*e[10]*e[15] + e[ 9]*e[ 2]*e[15] - e[ 9]*e[ 3]*e[14] - e[13]*e[ 2]*e[11] + e[13]*e[ 3]*e[10] ) / det, 
00280         ( e[ 1]*e[ 6]*e[15] - e[ 1]*e[ 7]*e[14] - e[ 5]*e[ 2]*e[15] + e[ 5]*e[ 3]*e[14] + e[13]*e[ 2]*e[ 7] - e[13]*e[ 3]*e[ 6] ) / det, 
00281         ( e[ 1]*e[ 7]*e[10] - e[ 1]*e[ 6]*e[11] + e[ 5]*e[ 2]*e[11] - e[ 5]*e[ 3]*e[10] - e[ 9]*e[ 2]*e[ 7] + e[ 9]*e[ 3]*e[ 6] ) / det, 
00282 
00283         ( e[ 4]*e[11]*e[14] - e[ 8]*e[ 7]*e[14] - e[12]*e[ 6]*e[11] - e[ 4]*e[10]*e[15] + e[ 8]*e[ 6]*e[15] + e[12]*e[ 7]*e[10] ) / det, 
00284         ( e[ 0]*e[10]*e[15] - e[ 0]*e[11]*e[14] - e[ 8]*e[ 2]*e[15] + e[ 8]*e[ 3]*e[14] + e[12]*e[ 2]*e[11] - e[12]*e[ 3]*e[10] ) / det, 
00285         ( e[ 0]*e[ 7]*e[14] - e[ 0]*e[ 6]*e[15] + e[ 4]*e[ 2]*e[15] - e[ 4]*e[ 3]*e[14] - e[12]*e[ 2]*e[ 7] + e[12]*e[ 3]*e[ 6] ) / det, 
00286         ( e[ 0]*e[ 6]*e[11] - e[ 0]*e[ 7]*e[10] - e[ 4]*e[ 2]*e[11] + e[ 4]*e[ 3]*e[10] + e[ 8]*e[ 2]*e[ 7] - e[ 8]*e[ 3]*e[ 6] ) / det, 
00287 
00288         ( e[ 4]*e[ 9]*e[15] - e[ 4]*e[11]*e[13] - e[ 8]*e[ 5]*e[15] + e[ 8]*e[ 7]*e[13] + e[12]*e[ 5]*e[11] - e[12]*e[ 7]*e[ 9] ) / det, 
00289         ( e[ 0]*e[11]*e[13] - e[ 0]*e[ 9]*e[15] + e[ 8]*e[ 1]*e[15] - e[ 8]*e[ 3]*e[13] - e[12]*e[ 1]*e[11] + e[12]*e[ 3]*e[ 9] ) / det, 
00290         ( e[ 0]*e[ 5]*e[15] - e[ 0]*e[ 7]*e[13] - e[ 4]*e[ 1]*e[15] + e[ 4]*e[ 3]*e[13] + e[12]*e[ 1]*e[ 7] - e[12]*e[ 3]*e[ 5] ) / det, 
00291         ( e[ 0]*e[ 7]*e[ 9] - e[ 0]*e[ 5]*e[11] + e[ 4]*e[ 1]*e[11] - e[ 4]*e[ 3]*e[ 9] - e[ 8]*e[ 1]*e[ 7] + e[ 8]*e[ 3]*e[ 5] ) / det, 
00292 
00293         ( e[12]*e[ 6]*e[ 9] + e[ 4]*e[10]*e[13] - e[12]*e[ 5]*e[10] - e[ 8]*e[ 6]*e[13] - e[ 4]*e[ 9]*e[14] + e[ 8]*e[ 5]*e[14] ) / det, 
00294         ( e[ 0]*e[ 9]*e[14] - e[ 0]*e[10]*e[13] - e[ 8]*e[ 1]*e[14] + e[ 8]*e[ 2]*e[13] + e[12]*e[ 1]*e[10] - e[12]*e[ 2]*e[ 9] ) / det, 
00295         ( e[ 0]*e[ 6]*e[13] - e[ 0]*e[ 5]*e[14] + e[ 4]*e[ 1]*e[14] - e[ 4]*e[ 2]*e[13] - e[12]*e[ 1]*e[ 6] + e[12]*e[ 2]*e[ 5] ) / det, 
00296         ( e[ 0]*e[ 5]*e[10] - e[ 0]*e[ 6]*e[ 9] - e[ 4]*e[ 1]*e[10] + e[ 4]*e[ 2]*e[ 9] + e[ 8]*e[ 1]*e[ 6] - e[ 8]*e[ 2]*e[ 5] ) / det 
00297     );
00298 }

template<typename T>
Matrix3x3< T > Matrix4x4< T >::GetMatrix3x3 (  )  const [inline]

Definition at line 508 of file TAPsMatrix4x4.cpp.

00509 {
00510     return Matrix3x3<T>( e[0], e[1], e[2],
00511                          e[4], e[5], e[6],
00512                          e[8], e[9], e[10] );
00513 }

template<typename T>
Matrix4x4< T > Matrix4x4< T >::GetTranspose (  )  const [inline]

Definition at line 252 of file TAPsMatrix4x4.cpp.

00253 {
00254     return  Matrix4x4<T> (  e[ 0], e[ 4], e[ 8], e[12],  
00255                             e[ 1], e[ 5], e[ 9], e[13], 
00256                             e[ 2], e[ 6], e[10], e[14], 
00257                             e[ 3], e[ 7], e[11], e[15] );
00258 }

template<typename T>
const double * Matrix4x4< T >::GetTransposeDataDouble (  )  const [inline]

Definition at line 569 of file TAPsMatrix4x4.cpp.

00570 {
00571     g_d[ 0] = static_cast<double>( e[ 0] );
00572     g_d[ 1] = static_cast<double>( e[ 4] );
00573     g_d[ 2] = static_cast<double>( e[ 8] );
00574     g_d[ 3] = static_cast<double>( e[12] );
00575     g_d[ 4] = static_cast<double>( e[ 1] );
00576     g_d[ 5] = static_cast<double>( e[ 5] );
00577     g_d[ 6] = static_cast<double>( e[ 9] );
00578     g_d[ 7] = static_cast<double>( e[13] );
00579     g_d[ 8] = static_cast<double>( e[ 2] );
00580     g_d[ 9] = static_cast<double>( e[ 6] );
00581     g_d[10] = static_cast<double>( e[10] );
00582     g_d[11] = static_cast<double>( e[14] );
00583     g_d[12] = static_cast<double>( e[ 3] );
00584     g_d[13] = static_cast<double>( e[ 7] );
00585     g_d[14] = static_cast<double>( e[11] );
00586     g_d[15] = static_cast<double>( e[15] );
00587     return g_d;
00588 }

template<typename T>
const float * Matrix4x4< T >::GetTransposeDataFloat (  )  const [inline]

Definition at line 547 of file TAPsMatrix4x4.cpp.

00548 {
00549     g_f[ 0] = static_cast<float>( e[ 0] );
00550     g_f[ 1] = static_cast<float>( e[ 4] );
00551     g_f[ 2] = static_cast<float>( e[ 8] );
00552     g_f[ 3] = static_cast<float>( e[12] );
00553     g_f[ 4] = static_cast<float>( e[ 1] );
00554     g_f[ 5] = static_cast<float>( e[ 5] );
00555     g_f[ 6] = static_cast<float>( e[ 9] );
00556     g_f[ 7] = static_cast<float>( e[13] );
00557     g_f[ 8] = static_cast<float>( e[ 2] );
00558     g_f[ 9] = static_cast<float>( e[ 6] );
00559     g_f[10] = static_cast<float>( e[10] );
00560     g_f[11] = static_cast<float>( e[14] );
00561     g_f[12] = static_cast<float>( e[ 3] );
00562     g_f[13] = static_cast<float>( e[ 7] );
00563     g_f[14] = static_cast<float>( e[11] );
00564     g_f[15] = static_cast<float>( e[15] );
00565     return g_f;
00566 }

template<typename T>
const long double * Matrix4x4< T >::GetTransposeDataLongDouble (  )  const [inline]

Definition at line 591 of file TAPsMatrix4x4.cpp.

00592 {
00593     g_ld[ 0] = static_cast<long double>( e[ 0] );
00594     g_ld[ 1] = static_cast<long double>( e[ 4] );
00595     g_ld[ 2] = static_cast<long double>( e[ 8] );
00596     g_ld[ 3] = static_cast<long double>( e[12] );
00597     g_ld[ 4] = static_cast<long double>( e[ 1] );
00598     g_ld[ 5] = static_cast<long double>( e[ 5] );
00599     g_ld[ 6] = static_cast<long double>( e[ 9] );
00600     g_ld[ 7] = static_cast<long double>( e[13] );
00601     g_ld[ 8] = static_cast<long double>( e[ 2] );
00602     g_ld[ 9] = static_cast<long double>( e[ 6] );
00603     g_ld[10] = static_cast<long double>( e[10] );
00604     g_ld[11] = static_cast<long double>( e[14] );
00605     g_ld[12] = static_cast<long double>( e[ 3] );
00606     g_ld[13] = static_cast<long double>( e[ 7] );
00607     g_ld[14] = static_cast<long double>( e[11] );
00608     g_ld[15] = static_cast<long double>( e[15] );
00609     return g_ld;
00610 }

template<typename T>
Matrix4x4< T > & Matrix4x4< T >::Inversed (  )  [inline]

Definition at line 262 of file TAPsMatrix4x4.cpp.

00263 {
00264     *this = (*this).GetInverse();
00265     return *this;
00266 }

template<typename T>
bool Matrix4x4< T >::IsIdentity (  )  const [inline]

Definition at line 212 of file TAPsMatrix4x4.cpp.

00213 {
00214     return  e[ 0] == Math<T>::ONE   &&
00215             e[ 1] == Math<T>::ZERO  &&
00216             e[ 2] == Math<T>::ZERO  &&
00217             e[ 3] == Math<T>::ZERO  &&
00218 
00219             e[ 4] == Math<T>::ZERO  &&
00220             e[ 5] == Math<T>::ONE   &&
00221             e[ 6] == Math<T>::ZERO  &&
00222             e[ 7] == Math<T>::ZERO  &&
00223             
00224             e[ 8] == Math<T>::ZERO  &&
00225             e[ 9] == Math<T>::ZERO  &&
00226             e[10] == Math<T>::ONE   &&
00227             e[11] == Math<T>::ZERO  &&
00228 
00229             e[12] == Math<T>::ZERO  &&
00230             e[13] == Math<T>::ZERO  &&
00231             e[14] == Math<T>::ZERO  &&
00232             e[15] == Math<T>::ONE;
00233 }

template<typename T>
bool Matrix4x4< T >::IsSquare (  )  const [inline]

Definition at line 105 of file TAPsMatrix4x4.hpp.

00106         { return true;}

template<typename T>
bool Matrix4x4< T >::IsSymmetric (  )  const [inline]

Definition at line 102 of file TAPsMatrix4x4.hpp.

00103         { return e[1]==e[4] && e[2]==e[ 8] && e[ 3]==e[12]
00104               && e[6]==e[9] && e[7]==e[13] && e[11]==e[14]; }

template<typename T>
void Matrix4x4< T >::MakeDiagonal ( T const   af[4]  )  [inline]

Definition at line 190 of file TAPsMatrix4x4.cpp.

00191 {
00192     e[ 0] = static_cast<T>(af[0]);
00193     e[ 5] = static_cast<T>(af[1]);
00194     e[10] = static_cast<T>(af[2]);
00195     e[15] = static_cast<T>(af[3]);
00196             e[ 1] = e[ 2] = e[ 3] = 
00197     e[ 4] =         e[ 6] = e[ 7] = 
00198     e[ 8] = e[ 9] =         e[11] = 
00199     e[12] = e[13] = e[14]         = Math<T>::ZERO;
00200 }

template<typename T>
void Matrix4x4< T >::MakeDiagonal ( d  )  [inline]

Definition at line 180 of file TAPsMatrix4x4.cpp.

00181 {
00182     e[ 0] = e[ 5] = e[10] = e[15] = static_cast<T>(d);
00183             e[ 1] = e[ 2] = e[ 3] = 
00184     e[ 4] =         e[ 6] = e[ 7] = 
00185     e[ 8] = e[ 9] =         e[11] = 
00186     e[12] = e[13] = e[14]         = Math<T>::ZERO;
00187 }

template<typename T>
void Matrix4x4< T >::MakeIdentity (  )  [inline]

Definition at line 170 of file TAPsMatrix4x4.cpp.

00171 {
00172     e[ 0] = e[ 5] = e[10] = e[15] = Math<T>::ONE;
00173             e[ 1] = e[ 2] = e[ 3] = 
00174     e[ 4] =         e[ 6] = e[ 7] = 
00175     e[ 8] = e[ 9] =         e[11] = 
00176     e[12] = e[13] = e[14]         = Math<T>::ZERO;
00177 }

template<typename T>
void Matrix4x4< T >::MakeZero (  )  [inline]

Definition at line 203 of file TAPsMatrix4x4.cpp.

00204 {
00205     e[ 0] = e[ 1] = e[ 2] = e[ 3] = 
00206     e[ 4] = e[ 5] = e[ 6] = e[ 7] = 
00207     e[ 8] = e[ 9] = e[10] = e[11] = 
00208     e[12] = e[13] = e[14] = e[15] = Math<T>::ZERO;
00209 }

template<typename T>
void Matrix4x4< T >::MultLeft ( Matrix4x4< T > const &  M  )  [inline]

Definition at line 454 of file TAPsMatrix4x4.cpp.

00455 {
00456     *this = M * (*this);
00457 }

template<typename T>
void Matrix4x4< T >::MultRight ( Matrix4x4< T > const &  M  )  [inline]

Definition at line 460 of file TAPsMatrix4x4.cpp.

00461 {
00462     *this *= M;
00463 }

template<typename T>
Matrix4x4< T >::operator const T * (  )  const [inline]

Definition at line 129 of file TAPsMatrix4x4.cpp.

00130 {   return e;   }

template<typename T>
Matrix4x4< T >::operator T * (  )  [inline]

Definition at line 133 of file TAPsMatrix4x4.cpp.

00134 {   return e;   }

template<typename T>
T const & Matrix4x4< T >::operator() ( int  r,
int  c 
) const [inline]

Definition at line 122 of file TAPsMatrix4x4.cpp.

00123 {   return e[r*4 + c];  }

template<typename T>
T & Matrix4x4< T >::operator() ( int  r,
int  c 
) [inline]

Definition at line 118 of file TAPsMatrix4x4.cpp.

00119 {   return e[r*4 + c];  }

template<typename T>
Vector4< T > Matrix4x4< T >::operator* ( Vector4< T > const &  V  )  const [inline]

Definition at line 467 of file TAPsMatrix4x4.cpp.

00468 {
00469     return Vector4<T>(
00470             V[0]*e[ 0] + V[1]*e[ 1] + V[2]*e[ 2] + V[3]*e[ 3],
00471             V[0]*e[ 4] + V[1]*e[ 5] + V[2]*e[ 6] + V[3]*e[ 7],
00472             V[0]*e[ 8] + V[1]*e[ 9] + V[2]*e[10] + V[3]*e[11],
00473             V[0]*e[12] + V[1]*e[13] + V[2]*e[14] + V[3]*e[15] );
00474 }

template<typename T>
Matrix4x4< T > Matrix4x4< T >::operator* ( s  )  const [inline]

Definition at line 436 of file TAPsMatrix4x4.cpp.

00437 {
00438     return Matrix4x4<T>(    e[ 0]*s, e[ 1]*s, e[ 2]*s, e[ 3]*s, 
00439                             e[ 4]*s, e[ 5]*s, e[ 6]*s, e[ 7]*s, 
00440                             e[ 8]*s, e[ 9]*s, e[10]*s, e[11]*s, 
00441                             e[12]*s, e[13]*s, e[14]*s, e[15]*s );
00442 }

template<typename T>
Matrix4x4< T > Matrix4x4< T >::operator* ( Matrix4x4< T > const &  M  )  const [inline]

Definition at line 410 of file TAPsMatrix4x4.cpp.

00411 {
00412     return Matrix4x4<T>(    
00413             e[ 0]*M.e[ 0] + e[ 1]*M.e[ 4] + e[ 2]*M.e[ 8] + e[ 3]*M.e[12],
00414             e[ 0]*M.e[ 1] + e[ 1]*M.e[ 5] + e[ 2]*M.e[ 9] + e[ 3]*M.e[13],
00415             e[ 0]*M.e[ 2] + e[ 1]*M.e[ 6] + e[ 2]*M.e[10] + e[ 3]*M.e[14],
00416             e[ 0]*M.e[ 3] + e[ 1]*M.e[ 7] + e[ 2]*M.e[11] + e[ 3]*M.e[15],
00417 
00418             e[ 4]*M.e[ 0] + e[ 5]*M.e[ 4] + e[ 6]*M.e[ 8] + e[ 7]*M.e[12],
00419             e[ 4]*M.e[ 1] + e[ 5]*M.e[ 5] + e[ 6]*M.e[ 9] + e[ 7]*M.e[13],
00420             e[ 4]*M.e[ 2] + e[ 5]*M.e[ 6] + e[ 6]*M.e[10] + e[ 7]*M.e[14],
00421             e[ 4]*M.e[ 3] + e[ 5]*M.e[ 7] + e[ 6]*M.e[11] + e[ 7]*M.e[15],
00422             
00423             e[ 8]*M.e[ 0] + e[ 9]*M.e[ 4] + e[10]*M.e[ 8] + e[11]*M.e[12],
00424             e[ 8]*M.e[ 1] + e[ 9]*M.e[ 5] + e[10]*M.e[ 9] + e[11]*M.e[13],
00425             e[ 8]*M.e[ 2] + e[ 9]*M.e[ 6] + e[10]*M.e[10] + e[11]*M.e[14],
00426             e[ 8]*M.e[ 3] + e[ 9]*M.e[ 7] + e[10]*M.e[11] + e[11]*M.e[15],
00427 
00428             e[12]*M.e[ 0] + e[13]*M.e[ 4] + e[14]*M.e[ 8] + e[15]*M.e[12],
00429             e[12]*M.e[ 1] + e[13]*M.e[ 5] + e[14]*M.e[ 9] + e[15]*M.e[13],
00430             e[12]*M.e[ 2] + e[13]*M.e[ 6] + e[14]*M.e[10] + e[15]*M.e[14],
00431             e[12]*M.e[ 3] + e[13]*M.e[ 7] + e[14]*M.e[11] + e[15]*M.e[15]
00432                         );
00433 }

template<typename T>
Matrix4x4< T > & Matrix4x4< T >::operator*= ( s  )  [inline]

Definition at line 369 of file TAPsMatrix4x4.cpp.

00370 {
00371     e[ 0] *= s;  e[ 1] *= s;  e[ 2] *= s;  e[ 3] *= s;
00372     e[ 4] *= s;  e[ 5] *= s;  e[ 6] *= s;  e[ 7] *= s;
00373     e[ 8] *= s;  e[ 9] *= s;  e[10] *= s;  e[11] *= s;
00374     e[12] *= s;  e[13] *= s;  e[14] *= s;  e[15] *= s;
00375     return *this;
00376 }

template<typename T>
Matrix4x4< T > & Matrix4x4< T >::operator*= ( Matrix4x4< T > const &  M  )  [inline]

Definition at line 362 of file TAPsMatrix4x4.cpp.

00363 {
00364     *this = (*this) * M;
00365     return *this;
00366 }

template<typename T>
Matrix4x4< T > Matrix4x4< T >::operator+ ( Matrix4x4< T > const &  M  )  const [inline]

Definition at line 392 of file TAPsMatrix4x4.cpp.

00393 {
00394     return Matrix4x4<T>(    e[ 0]+M.e[ 0], e[ 1]+M.e[ 1], e[ 2]+M.e[ 2], e[ 3]+M.e[ 3], 
00395                             e[ 4]+M.e[ 4], e[ 5]+M.e[ 5], e[ 6]+M.e[ 6], e[ 7]+M.e[ 7], 
00396                             e[ 8]+M.e[ 8], e[ 9]+M.e[ 9], e[10]+M.e[10], e[11]+M.e[11], 
00397                             e[12]+M.e[12], e[13]+M.e[13], e[14]+M.e[14], e[15]+M.e[15] );
00398 }

template<typename T>
Matrix4x4< T > & Matrix4x4< T >::operator+= ( Matrix4x4< T > const &  M  )  [inline]

Definition at line 342 of file TAPsMatrix4x4.cpp.

00343 {
00344     e[ 0] += M.e[ 0];  e[ 1] += M.e[ 1];  e[ 2] += M.e[ 2];  e[ 3] += M.e[ 3];
00345     e[ 4] += M.e[ 4];  e[ 5] += M.e[ 5];  e[ 6] += M.e[ 6];  e[ 7] += M.e[ 7];
00346     e[ 8] += M.e[ 8];  e[ 9] += M.e[ 9];  e[10] += M.e[10];  e[11] += M.e[11];
00347     e[12] += M.e[12];  e[13] += M.e[13];  e[14] += M.e[14];  e[15] += M.e[15];
00348     return *this;
00349 }

template<typename T>
Matrix4x4< T > Matrix4x4< T >::operator- ( Matrix4x4< T > const &  M  )  const [inline]

Definition at line 401 of file TAPsMatrix4x4.cpp.

00402 {
00403     return Matrix4x4<T>(    e[ 0]-M.e[ 0], e[ 1]-M.e[ 1], e[ 2]-M.e[ 2], e[ 3]-M.e[ 3], 
00404                             e[ 4]-M.e[ 4], e[ 5]-M.e[ 5], e[ 6]-M.e[ 6], e[ 7]-M.e[ 7], 
00405                             e[ 8]-M.e[ 8], e[ 9]-M.e[ 9], e[10]-M.e[10], e[11]-M.e[11], 
00406                             e[12]-M.e[12], e[13]-M.e[13], e[14]-M.e[14], e[15]-M.e[15] );
00407 }

template<typename T>
Matrix4x4< T > Matrix4x4< T >::operator- (  )  [inline]

Definition at line 330 of file TAPsMatrix4x4.cpp.

00331 {
00332     return Matrix4x4<T>(    -e[ 0], -e[ 1], -e[ 2], -e[ 3], 
00333                             -e[ 4], -e[ 5], -e[ 6], -e[ 7], 
00334                             -e[ 8], -e[ 9], -e[10], -e[11], 
00335                             -e[12], -e[13], -e[14], -e[15] );
00336 }

template<typename T>
Matrix4x4< T > & Matrix4x4< T >::operator-= ( Matrix4x4< T > const &  M  )  [inline]

Definition at line 352 of file TAPsMatrix4x4.cpp.

00353 {
00354     e[ 0] -= M.e[ 0];  e[ 1] -= M.e[ 1];  e[ 2] -= M.e[ 2];  e[ 3] -= M.e[ 3];
00355     e[ 4] -= M.e[ 4];  e[ 5] -= M.e[ 5];  e[ 6] -= M.e[ 6];  e[ 7] -= M.e[ 7];
00356     e[ 8] -= M.e[ 8];  e[ 9] -= M.e[ 9];  e[10] -= M.e[10];  e[11] -= M.e[11];
00357     e[12] -= M.e[12];  e[13] -= M.e[13];  e[14] -= M.e[14];  e[15] -= M.e[15];
00358     return *this;
00359 }

template<typename T>
Matrix4x4< T > Matrix4x4< T >::operator/ ( s  )  const [inline]

Definition at line 445 of file TAPsMatrix4x4.cpp.

00446 {
00447     return Matrix4x4<T>(    e[ 0]/s, e[ 1]/s, e[ 2]/s, e[ 3]/s, 
00448                             e[ 4]/s, e[ 5]/s, e[ 6]/s, e[ 7]/s, 
00449                             e[ 8]/s, e[ 9]/s, e[10]/s, e[11]/s, 
00450                             e[12]/s, e[13]/s, e[14]/s, e[15]/s );
00451 }

template<typename T>
Matrix4x4< T > & Matrix4x4< T >::operator/= ( s  )  [inline]

Definition at line 379 of file TAPsMatrix4x4.cpp.

00380 {
00381     e[ 0] /= s;  e[ 1] /= s;  e[ 2] /= s;  e[ 3] /= s;
00382     e[ 4] /= s;  e[ 5] /= s;  e[ 6] /= s;  e[ 7] /= s;
00383     e[ 8] /= s;  e[ 9] /= s;  e[10] /= s;  e[11] /= s;
00384     e[12] /= s;  e[13] /= s;  e[14] /= s;  e[15] /= s;
00385     return *this;
00386 }

template<typename T>
Matrix4x4< T > & Matrix4x4< T >::operator= ( Matrix4x4< T > const &  M  )  [inline]

Definition at line 314 of file TAPsMatrix4x4.cpp.

00315 {
00316     if ( this != &M )
00317     {
00318         e[ 0] = M.e[ 0];  e[ 1] = M.e[ 1];  e[ 2] = M.e[ 2];  e[ 3] = M.e[ 3];
00319         e[ 4] = M.e[ 4];  e[ 5] = M.e[ 5];  e[ 6] = M.e[ 6];  e[ 7] = M.e[ 7];
00320         e[ 8] = M.e[ 8];  e[ 9] = M.e[ 9];  e[10] = M.e[10];  e[11] = M.e[11];
00321         e[12] = M.e[12];  e[13] = M.e[13];  e[14] = M.e[14];  e[15] = M.e[15];
00322     }
00323     return *this;
00324 }

template<typename T>
T const & Matrix4x4< T >::operator[] ( int  i  )  const [inline]

Definition at line 114 of file TAPsMatrix4x4.cpp.

00115 {   return e[i];    }

template<typename T>
T & Matrix4x4< T >::operator[] ( int  i  )  [inline]

Definition at line 110 of file TAPsMatrix4x4.cpp.

00111 {   return e[i];    }

template<typename T>
void Matrix4x4< T >::SetAllElements ( T const   af[16]  )  [inline]

Definition at line 161 of file TAPsMatrix4x4.cpp.

00162 {
00163     e[ 0] = af[ 0];  e[ 1] = af[ 1];  e[ 2] = af[ 2]; e[ 3] = af[ 3];
00164     e[ 4] = af[ 4];  e[ 5] = af[ 5];  e[ 6] = af[ 6]; e[ 7] = af[ 7];
00165     e[ 8] = af[ 8];  e[ 9] = af[ 9];  e[10] = af[10]; e[11] = af[11];
00166     e[12] = af[12];  e[13] = af[13];  e[14] = af[14]; e[15] = af[15];
00167 }

template<typename T>
void Matrix4x4< T >::SetAllElements ( e00,
e01,
e02,
e03,
e10,
e11,
e12,
e13,
e20,
e21,
e22,
e23,
e30,
e31,
e32,
e33 
) [inline]

Definition at line 149 of file TAPsMatrix4x4.cpp.

00153 {
00154     e[ 0] = e00;  e[ 1] = e01;  e[ 2] = e02; e[ 3] = e03;
00155     e[ 4] = e10;  e[ 5] = e11;  e[ 6] = e12; e[ 7] = e13;
00156     e[ 8] = e20;  e[ 9] = e21;  e[10] = e22; e[11] = e23;
00157     e[12] = e30;  e[13] = e31;  e[14] = e32; e[15] = e33;
00158 }

template<typename T>
void Matrix4x4< T >::SetAllElements ( t  )  [inline]

Definition at line 140 of file TAPsMatrix4x4.cpp.

00141 {
00142     e[ 0] = e[ 1] = e[ 2] = e[ 3] = 
00143     e[ 4] = e[ 5] = e[ 6] = e[ 7] = 
00144     e[ 8] = e[ 9] = e[10] = e[11] = 
00145     e[12] = e[13] = e[14] = e[15] = t;
00146 }

template<typename T>
Matrix4x4< T > & Matrix4x4< T >::Transposed (  )  [inline]

Definition at line 239 of file TAPsMatrix4x4.cpp.

00240 {
00241     T temp;
00242     temp = e[ 1];  e[ 1] = e[ 4];  e[ 4] = temp;
00243     temp = e[ 2];  e[ 2] = e[ 8];  e[ 8] = temp;
00244     temp = e[ 3];  e[ 3] = e[12];  e[12] = temp;
00245     temp = e[ 6];  e[ 6] = e[ 9];  e[ 9] = temp;
00246     temp = e[ 7];  e[ 7] = e[13];  e[13] = temp;
00247     temp = e[11];  e[11] = e[14];  e[14] = temp;
00248     return *this;
00249 }


Friends And Related Function Documentation

template<typename T>
Matrix4x4<T> operator* ( s,
Matrix4x4< T > const &  M 
) [friend]

Definition at line 133 of file TAPsMatrix4x4.hpp.

00134     {   return M * s;   }

template<typename T>
std::ostream& operator<< ( std::ostream &  output,
Matrix4x4< T > const &  M 
) [friend]

Definition at line 45 of file TAPsMatrix4x4.hpp.

00046     {
00047         int width = 14;
00048         //output << typeid(*this).name() << "( ";
00049         output  << "Matrix4x4<" << typeid(T).name() << "> =\n"
00050                 << "| " << std::setw(width) << M.e[0] 
00051                         << std::setw(width) << M.e[1] 
00052                         << std::setw(width) << M.e[2] 
00053                         << std::setw(width) << M.e[3] << " |\n"
00054                 << "| " << std::setw(width) << M.e[4] 
00055                         << std::setw(width) << M.e[5] 
00056                         << std::setw(width) << M.e[6] 
00057                         << std::setw(width) << M.e[7] << " |\n"
00058                 << "| " << std::setw(width) << M.e[8] 
00059                         << std::setw(width) << M.e[9] 
00060                         << std::setw(width) << M.e[10] 
00061                         << std::setw(width) << M.e[11] << " |\n"
00062                 << "| " << std::setw(width) << M.e[12] 
00063                         << std::setw(width) << M.e[13] 
00064                         << std::setw(width) << M.e[14] 
00065                         << std::setw(width) << M.e[15] << " |\n";
00066         //output << std::endl;
00067         return output;
00068     }


Member Data Documentation

template<typename T>
T Matrix4x4< T >::e[16] [private]

Definition at line 35 of file TAPsMatrix4x4.hpp.

template<typename T>
double Matrix4x4< T >::g_d [inline, static, private]

Definition at line 39 of file TAPsMatrix4x4.hpp.

template<typename T>
BEGIN_NAMESPACE_TAPs float Matrix4x4< T >::g_f [inline, static, private]

Definition at line 38 of file TAPsMatrix4x4.hpp.

template<typename T>
long double Matrix4x4< T >::g_ld [inline, static, private]

Definition at line 40 of file TAPsMatrix4x4.hpp.


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

Generated on Mon Oct 13 11:45:11 2008 for TAPs by  doxygen 1.5.6