1
0
forked from josh/j3ml

Implement Transform2D

This commit is contained in:
2024-01-23 21:46:07 -05:00
parent f04e08201d
commit d012af1214
4 changed files with 63 additions and 10 deletions

View File

@@ -37,9 +37,14 @@ namespace LinearAlgebra {
return {x, y, z};
}
float Matrix3x3::At(int x, int y) const {
return this->elems[x][y];
}
void Matrix3x3::SetAt(int x, int y, float value)
{
this->elems[x][y] = value;
}
Vector3 Matrix3x3::operator*(const Vector3 &rhs) const {

View File

@@ -2,4 +2,29 @@
namespace LinearAlgebra {
const Transform2D Transform2D::Identity = Transform2D({0, 0}, {1, 1}, {0,0}, {0,0}, 0);
const Transform2D Transform2D::FlipX = Transform2D({0, 0}, {-1, 1}, {0,0}, {0,0}, 0);
const Transform2D Transform2D::FlipY = Transform2D({0, 0}, {1, -1}, {0,0}, {0,0}, 0);
Vector2 Transform2D::Transform(const Vector2 &input) const {
return transformation * input;
}
Transform2D::Transform2D(const Matrix3x3 &transform) : transformation(transform) { }
Transform2D::Transform2D(const Vector2& pos, const Vector2& scale, const Vector2& origin, const Vector2& skew, float rotation) {
transformation = Matrix3x3(pos.x, pos.y, rotation, scale.x, scale.y, origin.x, origin.y, skew.x, skew.y);
}
Transform2D Transform2D::Translate(float x, float y) const {
auto copy = Matrix3x3(transformation);
copy.SetAt(0, 0, transformation.At(0, 0) + x);
copy.SetAt(0, 1, transformation.At(0, 1) + y);
return Transform2D(copy);
}
Transform2D Transform2D::Translate(const LinearAlgebra::Vector2 &input) const {
return Translate(input.x, input.y);
}
}