78 memcpy(m,arr,9*
sizeof(
Real));
82 memcpy(m,rkMatrix.
m,9*
sizeof(
Real));
115 inline const Real* operator[] (
size_t iRow)
const
120 inline Real* operator[] (
size_t iRow)
131 Vector3 GetColumn (
size_t iCol)
const;
132 void SetColumn(
size_t iCol,
const Vector3& vec);
138 memcpy(m,rkMatrix.
m,9*
sizeof(
Real));
182 bool Inverse (
Matrix3& rkInverse,
Real fTolerance = 1e-06)
const;
184 Real Determinant ()
const;
189 void SingularValueComposition (
const Matrix3& rkL,
193 void Orthonormalize ();
199 Real SpectralNorm ()
const;
205 ToAngleAxis ( rkAxis, r );
208 void FromAngleAxis (
const Vector3& rkAxis,
const Radian& fRadians);
213 bool ToEulerAnglesXYZ (
Radian& rfYAngle,
Radian& rfPAngle,
215 bool ToEulerAnglesXZY (
Radian& rfYAngle,
Radian& rfPAngle,
217 bool ToEulerAnglesYXZ (
Radian& rfYAngle,
Radian& rfPAngle,
219 bool ToEulerAnglesYZX (
Radian& rfYAngle,
Radian& rfPAngle,
221 bool ToEulerAnglesZXY (
Radian& rfYAngle,
Radian& rfPAngle,
223 bool ToEulerAnglesZYX (
Radian& rfYAngle,
Radian& rfPAngle,
225 void FromEulerAnglesXYZ (
const Radian& fYAngle,
const Radian& fPAngle,
const Radian& fRAngle);
226 void FromEulerAnglesXZY (
const Radian& fYAngle,
const Radian& fPAngle,
const Radian& fRAngle);
227 void FromEulerAnglesYXZ (
const Radian& fYAngle,
const Radian& fPAngle,
const Radian& fRAngle);
228 void FromEulerAnglesYZX (
const Radian& fYAngle,
const Radian& fPAngle,
const Radian& fRAngle);
229 void FromEulerAnglesZXY (
const Radian& fYAngle,
const Radian& fPAngle,
const Radian& fRAngle);
230 void FromEulerAnglesZYX (
const Radian& fYAngle,
const Radian& fPAngle,
const Radian& fRAngle);
232 void EigenSolveSymmetric (
Real afEigenvalue[3],
233 Vector3 akEigenvector[3])
const;
235 static void TensorProduct (
const Vector3& rkU,
const Vector3& rkV,
242 Real t = m[0][0] * m[0][0] + m[1][0] * m[1][0] + m[2][0] * m[2][0];
245 t = m[0][1] * m[0][1] + m[1][1] * m[1][1] + m[2][1] * m[2][1];
248 t = m[0][2] * m[0][2] + m[1][2] * m[1][2] + m[2][2] * m[2][2];
257 inline _OgreExport friend std::ostream&
operator <<
260 o <<
"Matrix3(" << mat[0][0] <<
", " << mat[0][1] <<
", " << mat[0][2] <<
", "
261 << mat[1][0] <<
", " << mat[1][1] <<
", " << mat[1][2] <<
", "
262 << mat[2][0] <<
", " << mat[2][1] <<
", " << mat[2][2] <<
")";
272 void Tridiagonal (
Real afDiag[3],
Real afSubDiag[3]);
273 bool QLAlgorithm (
Real afDiag[3],
Real afSubDiag[3]);
284 static Real MaxCubicRoot (
Real afCoeff[3]);
Class encapsulating a standard 4x4 homogeneous matrix.
float Real
Software floating point type.
static const Real msSvdEpsilon
Matrix3(Real fEntry00, Real fEntry01, Real fEntry02, Real fEntry10, Real fEntry11, Real fEntry12, Real fEntry20, Real fEntry21, Real fEntry22)
void swap(Matrix3 &other)
Exchange the contents of this matrix with another.
static const Matrix3 IDENTITY
A 3x3 matrix which can represent rotations around axes.
Radian operator*(Real a, const Radian &b)
static bool RealEqual(Real a, Real b, Real tolerance=std::numeric_limits< Real >::epsilon())
Compare 2 reals, using tolerance for inaccuracies.
Matrix3(const Real arr[3][3])
Matrix3()
Default constructor.
Wrapper class which indicates a given angle value is in Degrees.
bool hasScale() const
Determines if this matrix involves a scaling.
Matrix3(const Matrix3 &rkMatrix)
void swap(Ogre::SmallVectorImpl< T > &LHS, Ogre::SmallVectorImpl< T > &RHS)
Implement std::swap in terms of SmallVector swap.
Standard 3-dimensional vector.
static const unsigned int msSvdMaxIterations
Wrapper class which indicates a given angle value is in Radians.
static const Matrix3 ZERO
void ToAngleAxis(Vector3 &rkAxis, Degree &rfAngle) const
static const Real EPSILON
bool operator==(STLAllocator< T, P > const &, STLAllocator< T2, P > const &)
determine equality, can memory from another allocator be released by this allocator, (ISO C++)
bool operator!=(STLAllocator< T, P > const &, STLAllocator< T2, P > const &)
determine equality, can memory from another allocator be released by this allocator, (ISO C++)