mirror of
https://github.com/ENSL/NS.git
synced 2024-12-15 07:01:33 +00:00
48 lines
818 B
C
48 lines
818 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
|
||
|
|