feat: sync with Whoa implementation

This commit is contained in:
VDm 2026-04-24 00:30:51 +04:00
parent 254ba545f5
commit 6a31dc3ea4
19 changed files with 988 additions and 774 deletions

View file

@ -17,12 +17,12 @@ class C33Matrix {
// Static functions
static float Det(float a, float b, float c, float d);
static C33Matrix Rotation(float angle);
static C33Matrix Rotation(float angle, const C3Vector& axis, bool unit);
static C33Matrix RotationAroundX(float angle);
static C33Matrix RotationAroundY(float angle);
static C33Matrix RotationAroundZ(float angle);
static C33Matrix Rotation(float angle);
static C33Matrix Rotation(float angle, const C3Vector& axis, bool unit);
// Member variables
float a0 = 1.0f;
@ -38,51 +38,41 @@ class C33Matrix {
// Member functions
C33Matrix() = default;
C33Matrix(const C3Vector& r0, const C3Vector& r1, const C3Vector& r2);
C33Matrix(float a0, float a1, float a2, float b0, float b1, float b2, float c0, float c1, float c2);
explicit C33Matrix(const C34Matrix& m);
explicit C33Matrix(const C44Matrix& m);
explicit C33Matrix(const C4Quaternion& rotation);
C33Matrix(float a0, float a1, float a2, float b0, float b1, float b2, float c0, float c1, float c2);
explicit C33Matrix(float a);
C33Matrix Adjoint() const;
C33Matrix AffineInverse(const C3Vector& v) const;
C33Matrix AffineInverse(float uniformScale) const;
C33Matrix Cofactors() const;
float Determinant() const;
void FromEulerAnglesZYX(float yaw, float pitch, float roll);
void Identity();
C33Matrix Inverse() const;
C33Matrix Inverse(float det) const;
void Rotate(const C4Quaternion& rotation);
void Rotate(float angle);
void Rotate(float angle, const C3Vector& axis, bool unit);
void Scale(const C2Vector& scale);
void Scale(const C3Vector& scale);
void Scale(float scale);
void Scale(float x, float y);
void Scale(float x, float y, float z);
float Trace();
void Translate(const C2Vector& move);
C33Matrix Transpose() const;
void Zero();
C33Matrix& operator+=(const C33Matrix& a);
C33Matrix& operator-=(const C33Matrix& a);
C33Matrix& operator*=(float a);
C33Matrix& operator*=(const C33Matrix& a);
C33Matrix& operator/=(float a);
void Zero();
void Identity();
float Trace();
void Scale(float scale);
void Scale(float x, float y);
void Scale(const C2Vector& scale);
void Scale(float x, float y, float z);
void Scale(const C3Vector& scale);
void Rotate(float angle);
void Rotate(const C4Quaternion& rotation);
void Rotate(float angle, const C3Vector& axis, bool unit);
void Translate(const C2Vector& move);
C33Matrix Transpose() const;
float Determinant() const;
C33Matrix Cofactors() const;
C33Matrix Adjoint() const;
C33Matrix Inverse() const;
C33Matrix Inverse(float det) const;
C33Matrix AffineInverse(const C3Vector& v) const;
C33Matrix AffineInverse(float a) const;
bool ToEulerAnglesXYZ(float& xa_, float& ya_, float& za_);
bool ToEulerAnglesXZY(float& xa_, float& za_, float& ya_);
bool ToEulerAnglesYXZ(float& ya_, float& xa_, float& za_);
bool ToEulerAnglesYZX(float& ya_, float& za_, float& xa_);
bool ToEulerAnglesZXY(float& za_, float& xa_, float& ya_);
bool ToEulerAnglesZYX(float& za_, float& ya_, float& xa_);
void FromEulerAnglesXYZ(float yaw, float pitch, float roll);
void FromEulerAnglesXZY(float yaw, float pitch, float roll);
void FromEulerAnglesYXZ(float yaw, float pitch, float roll);
void FromEulerAnglesYZX(float yaw, float pitch, float roll);
void FromEulerAnglesZXY(float yaw, float pitch, float roll);
void FromEulerAnglesZYX(float yaw, float pitch, float roll);
};
C33Matrix operator*(const C33Matrix& l, const C33Matrix& r);