NS/main/source/util/Mat3.h

48 lines
771 B
C++

#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