From 139fdcc2cfb82ff2adb1a4d762ccde5bd59bbac0 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 15 Sep 2021 19:46:52 +0200 Subject: [PATCH] LibGfx: Add some interpolation helpers for Gfx::Point - linear_interpolate - quadratic_interpolate - cubic_interpolate --- Userland/Libraries/LibGfx/Point.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Userland/Libraries/LibGfx/Point.h b/Userland/Libraries/LibGfx/Point.h index f569d83131..44776a4d7b 100644 --- a/Userland/Libraries/LibGfx/Point.h +++ b/Userland/Libraries/LibGfx/Point.h @@ -249,6 +249,24 @@ private: using IntPoint = Point; using FloatPoint = Point; +template +inline Point linear_interpolate(Point const& p1, Point const& p2, float t) +{ + return Point { p1.x() + t * (p2.x() - p1.x()), p1.y() + t * (p2.y() - p1.y()) }; +} + +template +inline Point quadratic_interpolate(Point const& p1, Point const& p2, Point const& c1, float t) +{ + return linear_interpolate(linear_interpolate(p1, c1, t), linear_interpolate(c1, p2, t), t); +} + +template +inline Point cubic_interpolate(Point const& p1, Point const& p2, Point const& c1, Point const& c2, float t) +{ + return linear_interpolate(quadratic_interpolate(p1, c1, c2, t), quadratic_interpolate(c1, c2, p2, t), t); +} + } namespace AK {