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 {