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]);
Matrix3(Real fEntry00, Real fEntry01, Real fEntry02, Real fEntry10, Real fEntry11, Real fEntry12, Real fEntry20, Real fEntry21, Real fEntry22)
Matrix3(const Real arr[3][3])
Matrix3()
Default constructor.
bool hasScale() const
Determines if this matrix involves a scaling.
A 3x3 matrix which can represent rotations around axes.
float Real
Software floating point type.
static const Matrix3 ZERO
static const unsigned int msSvdMaxIterations
Class encapsulating a standard 4x4 homogeneous matrix.
Standard 3-dimensional vector.
static const Real EPSILON
void ToAngleAxis(Vector3 &rkAxis, Degree &rfAngle) const
bool operator!=(STLAllocator< T, P > const &, STLAllocator< T2, P > const &)
determine equality, can memory from another allocator be released by this allocator, (ISO C++)
static const Matrix3 IDENTITY
void swap(Ogre::SmallVectorImpl< T > &LHS, Ogre::SmallVectorImpl< T > &RHS)
Implement std::swap in terms of SmallVector swap.
static const Real msSvdEpsilon
Matrix3(const Matrix3 &rkMatrix)
bool operator==(STLAllocator< T, P > const &, STLAllocator< T2, P > const &)
determine equality, can memory from another allocator be released by this allocator, (ISO C++)
Wrapper class which indicates a given angle value is in Degrees.
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.
void swap(Matrix3 &other)
Exchange the contents of this matrix with another.
Wrapper class which indicates a given angle value is in Radians.