diff --git a/include/zeus/CMatrix3f.hpp b/include/zeus/CMatrix3f.hpp index 5034d73..682decc 100644 --- a/include/zeus/CMatrix3f.hpp +++ b/include/zeus/CMatrix3f.hpp @@ -211,6 +211,14 @@ public: TVectorUnion{0.f, 0.f, 1.f, 0.f}); } + float determinant() const + { + return + m[1][0] * (m[2][1] * m[0][2] - m[0][1] * m[2][2]) + + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) + + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); + } + union { float m[3][4]; /* 4th row for union-alignment */ struct diff --git a/include/zeus/CQuaternion.hpp b/include/zeus/CQuaternion.hpp index 09e0423..0d21d00 100644 --- a/include/zeus/CQuaternion.hpp +++ b/include/zeus/CQuaternion.hpp @@ -268,6 +268,9 @@ public: CQuaternion buildEquivalent() const; + zeus::CVector3f getImaginary() const { return {x, y, z}; } + void setImaginary(const zeus::CVector3f& i) { x = i.x; y = i.y; z = i.z; } + inline float& operator[](size_t idx) { return (&w)[idx]; } inline const float& operator[](size_t idx) const { return (&w)[idx]; }