#ifndef UTIL_MAT3_H #define UTIL_MAT3_H /** * 3x3 Matrix class. */ class Mat3 { public: /** * Elements are uninitialized. */ Mat3(); /** * Converts from Euler angles to a rotation matrix. */ Mat3(const float angles[3]); float& operator()(int r, int c); float operator()(int r, int c) const; /** * Extracts Euler angles from the matrix. */ void GetEulerAngles(float angles[3]) const; void SetEulerAngles(const float angles[3]); void TransformVector(float vector[3]) const; /** * If the columns of the matrix are orthonormal (as is the case with a * rotation matrix), then the transpose is also the inverse. */ Mat3 Transpose() const; private: float element[3][3]; }; Mat3 operator*(const Mat3& m1, const Mat3& m2); #endif