From 9ecc78db1ba1cb888b7893393fe89655f69f2193 Mon Sep 17 00:00:00 2001 From: MacDue Date: Thu, 6 Jul 2023 19:12:00 +0100 Subject: [PATCH] LibGfx: Add AffineTransform::determinant() --- Userland/Libraries/LibGfx/AffineTransform.cpp | 21 ++++++++++++------- Userland/Libraries/LibGfx/AffineTransform.h | 1 + 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Userland/Libraries/LibGfx/AffineTransform.cpp b/Userland/Libraries/LibGfx/AffineTransform.cpp index 7f6f7f4747..f0479fcf51 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 beebcdc855..693f6652b5 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: