Files
j3ml/include/J3ML/LinearAlgebra/Transform2D.hpp
josh 1bbe237510
Some checks failed
Run ReCI Build Test / Explore-Gitea-Actions (push) Failing after 1m28s
Build Docs With Doxygen / Explore-Gitea-Actions (push) Successful in 27s
Further Transform2D
2025-04-22 00:28:10 -04:00

57 lines
1.9 KiB
C++

#pragma once
#include <J3ML/LinearAlgebra/Matrix3x3.hpp>
namespace J3ML::LinearAlgebra {
/// A class that performs and represents translations, rotations, and scaling operations in two dimensions.
class Transform2D {
protected:
// TODO: Verify column-major order (or transpose it) for compatibility with OpenGL.
Matrix3x3 transformation;
public:
const static Transform2D Identity;
const static Transform2D FlipX;
const static Transform2D FlipY;
/// Default constructor initializes to an Identity transformation.
Transform2D();
Transform2D(const Vector2& pos, const Vector2& scale, const Vector2& origin, const Vector2& skew, float rotation);
explicit Transform2D(const Matrix3x3& transform);
static Transform2D FromScale(float sx, float sy);
static Transform2D FromScale(const Vector2& scale);
static Transform2D FromRotation(float radians);
static Transform2D FromTranslation(const Vector2& translation);
static Transform2D FromTranslation(float tx, float ty);
/// Returns a Transform2D
Transform2D Translate(const Vector2& offset) const;
Transform2D Translate(float x, float y) const;
Transform2D Scale(float scale);
Transform2D Scale(float x, float y);
Transform2D Scale(const Vector2& scales);
Transform2D Rotate(float radians);
/// Transforms a given 2D point by this transformation.
Vector2 Transform(const Vector2& point) const;
Transform2D Inverse() const;
Transform2D AffineInverse() const;
Vector2 ForwardVector() const;
Vector2 UpVector() const;
float Determinant() const;
float& At(int row, int col);
[[nodiscard]] float At(int row, int col) const;
Vector2 GetTranslation() const;
float GetRotation() const;
Vector2 GetScale() const;
Transform2D OrthoNormalize();
};
}