#pragma once #include #include namespace LinearAlgebra { class Transform2D { protected: Matrix3x3 transformation; public: const static Transform2D Identity; const static Transform2D FlipX; const static Transform2D FlipY; Transform2D(float rotation, const Vector2& pos); Transform2D(float px, float py, float sx, float sy, float ox, float oy, float kx, float ky, float rotation) { transformation = Matrix3x3(px, py, rotation, sx, sy, ox, oy, kx, ky); } Transform2D(const Vector2& pos, const Vector2& scale, const Vector2& origin, const Vector2& skew, float rotation); Transform2D(const Matrix3x3& transform); Transform2D Translate(const Vector2& offset) const; Transform2D Translate(float x, float y) const; Transform2D Scale(float scale); // Perform Uniform Scale Transform2D Scale(float x, float y); // Perform Nonunform Scale Transform2D Scale(const Vector2& scales); // Perform Nonuniform Scale Transform2D Rotate(); Vector2 Transform(const Vector2& input) const; Transform2D Inverse() const; Transform2D AffineInverse() const; float Determinant() const; Vector2 GetOrigin() const; float GetRotation() const; Vector2 GetScale() const; float GetSkew() const; Transform2D OrthoNormalize(); }; }