84 MATRIX3x3( T a00, T a01, T a02, T a10, T a11, T a12, T a20, T a21, T a22 );
159 friend std::ostream& operator<<<T>( std::ostream& aStream,
const MATRIX3x3<T>& aMatrix );
182 for(
int j = 0; j < 3; j++ )
184 for(
int i = 0; i < 3; i++ )
212 for(
int j = 0; j < 3; j++ )
214 for(
int i = 0; i < 3; i++ )
228 m_data[0][2] = aTranslation.
x;
229 m_data[1][2] = aTranslation.
y;
237 result.
x = m_data[0][2];
238 result.
y = m_data[1][2];
247 T cosValue = cos( aAngle );
248 T sinValue = sin( aAngle );
249 m_data[0][0] = cosValue;
250 m_data[0][1] = -sinValue;
251 m_data[1][0] = sinValue;
252 m_data[1][1] = cosValue;
259 m_data[0][0] = aScale.
x;
260 m_data[1][1] = aScale.
y;
267 VECTOR2<T> result( m_data[0][0], m_data[1][1] );
278 for(
int i = 0; i < 3; i++ )
280 for(
int j = 0; j < 3; j++ )
296 result.
x = aMatrix.
m_data[0][0] * aVector.
x + aMatrix.
m_data[0][1] * aVector.
y 298 result.
y = aMatrix.
m_data[1][0] * aVector.
x + aMatrix.
m_data[1][1] * aVector.
y 308 return m_data[0][0] * ( m_data[1][1] * m_data[2][2] - m_data[1][2] * m_data[2][1] )
309 - m_data[0][1] * ( m_data[1][0] * m_data[2][2] - m_data[1][2] * m_data[2][0] )
310 + m_data[0][2] * ( m_data[1][0] * m_data[2][1] - m_data[1][1] * m_data[2][0] );
314 template <
class T,
class S>
319 for(
int i = 0; i < 3; i++ )
321 for(
int j = 0; j < 3; j++ )
331 template <
class T,
class S>
334 return aMatrix * aScalar;
343 result.
m_data[0][0] = m_data[1][1] * m_data[2][2] - m_data[2][1] * m_data[1][2];
344 result.
m_data[0][1] = m_data[0][2] * m_data[2][1] - m_data[2][2] * m_data[0][1];
345 result.
m_data[0][2] = m_data[0][1] * m_data[1][2] - m_data[1][1] * m_data[0][2];
347 result.
m_data[1][0] = m_data[1][2] * m_data[2][0] - m_data[2][2] * m_data[1][0];
348 result.
m_data[1][1] = m_data[0][0] * m_data[2][2] - m_data[2][0] * m_data[0][2];
349 result.
m_data[1][2] = m_data[0][2] * m_data[1][0] - m_data[1][2] * m_data[0][0];
351 result.
m_data[2][0] = m_data[1][0] * m_data[2][1] - m_data[2][0] * m_data[1][1];
352 result.
m_data[2][1] = m_data[0][1] * m_data[2][0] - m_data[2][1] * m_data[0][0];
353 result.
m_data[2][2] = m_data[0][0] * m_data[1][1] - m_data[1][0] * m_data[0][1];
355 return result * ( 1.0 / Determinant() );
364 for(
int i = 0; i < 3; i++ )
366 for(
int j = 0; j < 3; j++ )
368 result.
m_data[j][i] = m_data[i][j];
379 for(
int i = 0; i < 3; i++ )
383 for(
int j = 0; j < 3; j++ )
385 aStream << aMatrix.
m_data[i][j];
void SetRotation(T aAngle)
Set the rotation components of the matrix.
MATRIX3x3()
Initialize all matrix members to zero.
MATRIX3x3 Inverse() const
Determine the inverse of the matrix.
Define a general 2D-vector/point.
MATRIX3x3 Transpose() const
Get the transpose of the matrix.
void SetIdentity()
Set the matrix to the identity matrix.
VECTOR2< T > GetScale() const
Get the scale components of the matrix.
MATRIX3x3< double > MATRIX3x3D
std::ostream & operator<<(std::ostream &aStream, const MATRIX3x3< T > &aMatrix)
MATRIX3x3< T > const operator *(MATRIX3x3< T > const &aA, MATRIX3x3< T > const &aB)
Matrix multiplication.
VECTOR2< T > GetTranslation() const
Get the translation components of the matrix.
void SetScale(VECTOR2< T > aScale)
Set the scale components of the matrix.
T Determinant() const
Compute the determinant of the matrix.
MATRIX3x3 describes a general 3x3 matrix.
void SetTranslation(VECTOR2< T > aTranslation)
Set the translation components of the matrix.