diff --git a/Userland/Libraries/LibGfx/AffineTransform.cpp b/Userland/Libraries/LibGfx/AffineTransform.cpp index 7f6f7f4747e..f0479fcf51c 100644 --- a/Userland/Libraries/LibGfx/AffineTransform.cpp +++ b/Userland/Libraries/LibGfx/AffineTransform.cpp @@ -134,18 +134,23 @@ AffineTransform& AffineTransform::rotate_radians(float radians) return *this; } +float AffineTransform::determinant() const +{ + return a() * d() - b() * c(); +} + Optional AffineTransform::inverse() const { - auto determinant = a() * d() - b() * c(); - if (determinant == 0) + auto det = determinant(); + if (det == 0) return {}; return AffineTransform { - d() / determinant, - -b() / determinant, - -c() / determinant, - a() / determinant, - (c() * f() - d() * e()) / determinant, - (b() * e() - a() * f()) / determinant, + d() / det, + -b() / det, + -c() / det, + a() / det, + (c() * f() - d() * e()) / det, + (b() * e() - a() * f()) / det, }; } diff --git a/Userland/Libraries/LibGfx/AffineTransform.h b/Userland/Libraries/LibGfx/AffineTransform.h index beebcdc855d..693f6652b53 100644 --- a/Userland/Libraries/LibGfx/AffineTransform.h +++ b/Userland/Libraries/LibGfx/AffineTransform.h @@ -68,6 +68,7 @@ public: AffineTransform& skew_radians(float x_radians, float y_radians); AffineTransform& multiply(AffineTransform const&); + float determinant() const; Optional inverse() const; private: