#pragma once #include #include namespace J3ML::LinearAlgebra { class Matrix2x2 { public: enum { Rows = 3 }; enum { Cols = 3 }; static const Matrix2x2 Zero; static const Matrix2x2 Identity; static const Matrix2x2 NaN; Matrix2x2() {} Matrix2x2(float val); Matrix2x2(float m00, float m01, float m10, float m11); Matrix2x2(const Vector2& r1, const Vector2& r2); Vector2 GetRow(int index) const; Vector2 GetColumn(int index) const; float At(int x, int y) const; float Determinant() const; Matrix2x2 Inverse() const; Matrix2x2 Transpose() const; Vector2 Transform(const Vector2& rhs) const; Vector2 operator * (const Vector2& rhs) const; Matrix2x2 operator * (const Matrix2x2 &rhs) const; protected: float elems[2][2]; }; }