From 4e16f5d9bfa8b3761d931c4646a53bd757c84c63 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 24 Jul 2021 12:00:54 +0300 Subject: [PATCH] Add ray-sphere intersection --- libs/geom/include/psemek/geom/intersection.hpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libs/geom/include/psemek/geom/intersection.hpp b/libs/geom/include/psemek/geom/intersection.hpp index f332dddc..dc8d8324 100644 --- a/libs/geom/include/psemek/geom/intersection.hpp +++ b/libs/geom/include/psemek/geom/intersection.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -209,4 +210,18 @@ namespace psemek::geom return static_cast(intersection(seg, s)); } + template + std::optional> intersection(ray const & r, sphere const & s) + { + auto d = r.origin - s.center; + + return solve_quadratic(length_sqr(r.direction), T{2} * dot(r.direction, d), length_sqr(d) - sqr(s.radius)); + } + + template 2)>> + bool intersect(ray const & r, sphere const & s) + { + return static_cast(intersection(r, s)); + } + }