aiMatrix3x3.inl 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /** @file Inline implementation of the 3x3 matrix operators */
  2. #ifndef AI_MATRIX3x3_INL_INC
  3. #define AI_MATRIX3x3_INL_INC
  4. #include "aiMatrix3x3.h"
  5. #ifdef __cplusplus
  6. #include "aiMatrix4x4.h"
  7. #include <algorithm>
  8. // ------------------------------------------------------------------------------------------------
  9. // Construction from a 4x4 matrix. The remaining parts of the matrix are ignored.
  10. inline aiMatrix3x3::aiMatrix3x3( const aiMatrix4x4& pMatrix)
  11. {
  12. a1 = pMatrix.a1; a2 = pMatrix.a2; a3 = pMatrix.a3;
  13. b1 = pMatrix.b1; b2 = pMatrix.b2; b3 = pMatrix.b3;
  14. c1 = pMatrix.c1; c2 = pMatrix.c2; c3 = pMatrix.c3;
  15. }
  16. // ------------------------------------------------------------------------------------------------
  17. inline aiMatrix3x3& aiMatrix3x3::operator *= (const aiMatrix3x3& m)
  18. {
  19. *this = aiMatrix3x3(
  20. m.a1 * a1 + m.b1 * a2 + m.c1 * a3,
  21. m.a2 * a1 + m.b2 * a2 + m.c2 * a3,
  22. m.a3 * a1 + m.b3 * a2 + m.c3 * a3,
  23. m.a1 * b1 + m.b1 * b2 + m.c1 * b3,
  24. m.a2 * b1 + m.b2 * b2 + m.c2 * b3,
  25. m.a3 * b1 + m.b3 * b2 + m.c3 * b3,
  26. m.a1 * c1 + m.b1 * c2 + m.c1 * c3,
  27. m.a2 * c1 + m.b2 * c2 + m.c2 * c3,
  28. m.a3 * c1 + m.b3 * c2 + m.c3 * c3);
  29. return *this;
  30. }
  31. // ------------------------------------------------------------------------------------------------
  32. inline aiMatrix3x3 aiMatrix3x3::operator* (const aiMatrix3x3& m) const
  33. {
  34. aiMatrix3x3 temp( *this);
  35. temp *= m;
  36. return temp;
  37. }
  38. // ------------------------------------------------------------------------------------------------
  39. inline aiMatrix3x3& aiMatrix3x3::Transpose()
  40. {
  41. std::swap( a2, b1);
  42. std::swap( a3, c1);
  43. std::swap( b3, c2);
  44. }
  45. #endif // __cplusplus
  46. #endif // AI_MATRIX3x3_INL_INC