30 #include <math/vector2d.h>
58 std::ostream& operator<<( std::ostream& aStream,
const MATRIX3x3<T>& aMatrix );
88 MATRIX3x3( T a00, T a01, T a02, T a10, T a11, T a12, T a20, T a21, T a22 );
163 friend std::ostream& operator<<<T>( std::ostream& aStream,
const MATRIX3x3<T>& aMatrix );
186 for(
int j = 0; j < 3; j++ )
188 for(
int i = 0; i < 3; i++ )
216 for(
int j = 0; j < 3; j++ )
218 for(
int i = 0; i < 3; i++ )
232 m_data[0][2] = aTranslation.x;
233 m_data[1][2] = aTranslation.y;
241 result.x = m_data[0][2];
242 result.y = m_data[1][2];
251 T cosValue = cos( aAngle );
252 T sinValue = sin( aAngle );
253 m_data[0][0] = cosValue;
254 m_data[0][1] = -sinValue;
255 m_data[1][0] = sinValue;
256 m_data[1][1] = cosValue;
263 m_data[0][0] = aScale.x;
264 m_data[1][1] = aScale.y;
271 VECTOR2<T> result( m_data[0][0], m_data[1][1] );
282 for(
int i = 0; i < 3; i++ )
284 for(
int j = 0; j < 3; j++ )
286 result.m_data[i][j] = aA.m_data[i][0] * aB.m_data[0][j] +
287 aA.m_data[i][1] * aB.m_data[1][j] +
288 aA.m_data[i][2] * aB.m_data[2][j];
300 result.x = aMatrix.m_data[0][0] * aVector.x + aMatrix.m_data[0][1] * aVector.y
301 + aMatrix.m_data[0][2];
302 result.y = aMatrix.m_data[1][0] * aVector.x + aMatrix.m_data[1][1] * aVector.y
303 + aMatrix.m_data[1][2];
312 return m_data[0][0] * ( m_data[1][1] * m_data[2][2] - m_data[1][2] * m_data[2][1] )
313 - m_data[0][1] * ( m_data[1][0] * m_data[2][2] - m_data[1][2] * m_data[2][0] )
314 + m_data[0][2] * ( m_data[1][0] * m_data[2][1] - m_data[1][1] * m_data[2][0] );
318 template <
class T,
class S>
323 for(
int i = 0; i < 3; i++ )
325 for(
int j = 0; j < 3; j++ )
327 result.m_data[i][j] = aMatrix.m_data[i][j] * aScalar;
335 template <
class T,
class S>
338 return aMatrix * aScalar;
347 result.m_data[0][0] = m_data[1][1] * m_data[2][2] - m_data[2][1] * m_data[1][2];
348 result.m_data[0][1] = m_data[0][2] * m_data[2][1] - m_data[2][2] * m_data[0][1];
349 result.m_data[0][2] = m_data[0][1] * m_data[1][2] - m_data[1][1] * m_data[0][2];
351 result.m_data[1][0] = m_data[1][2] * m_data[2][0] - m_data[2][2] * m_data[1][0];
352 result.m_data[1][1] = m_data[0][0] * m_data[2][2] - m_data[2][0] * m_data[0][2];
353 result.m_data[1][2] = m_data[0][2] * m_data[1][0] - m_data[1][2] * m_data[0][0];
355 result.m_data[2][0] = m_data[1][0] * m_data[2][1] - m_data[2][0] * m_data[1][1];
356 result.m_data[2][1] = m_data[0][1] * m_data[2][0] - m_data[2][1] * m_data[0][0];
357 result.m_data[2][2] = m_data[0][0] * m_data[1][1] - m_data[1][0] * m_data[0][1];
359 return result * ( 1.0 / Determinant() );
368 for(
int i = 0; i < 3; i++ )
370 for(
int j = 0; j < 3; j++ )
372 result.m_data[j][i] = m_data[i][j];
381 std::ostream& operator<<( std::ostream& aStream,
const MATRIX3x3<T>& aMatrix )
383 for(
int i = 0; i < 3; i++ )
387 for(
int j = 0; j < 3; j++ )
389 aStream << aMatrix.m_data[i][j];