From d1c6aa5a881e2a461754c1aea5b104513f0a6671 Mon Sep 17 00:00:00 2001 From: meintte Date: Sun, 4 Feb 2024 20:21:35 +0100 Subject: [PATCH] Implement closest(ray, point) --- olcUTIL_Geometry2D.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/olcUTIL_Geometry2D.h b/olcUTIL_Geometry2D.h index cedf02a..dc674f8 100644 --- a/olcUTIL_Geometry2D.h +++ b/olcUTIL_Geometry2D.h @@ -173,7 +173,7 @@ | | | | | | | ---------+--------------+--------------+--------------+--------------+--------------+--------------+ RAY | | | | | | | - | | | | | | | + | closest | | | | | | | | collision | collision | collision | collision | collision* | | | intersects | intersects | intersects | intersects | intersects | | | reflect | reflect | reflect | reflect | reflect* | @@ -877,13 +877,13 @@ namespace olc::utils::geom2d } } - // closest(ray,p) + // closest(q,p) // Returns closest point on ray to point template - inline olc::v_2d closest(const ray& r, const olc::v_2d& p) + inline constexpr olc::v_2d closest(const ray& q, const olc::v_2d& p) { - // TODO: implement - return p; + double u = std::max(double(q.direction.dot(p - q.origin)) / q.direction.mag2(), 0.0); + return q.origin + u * q.direction; }