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)); + } + }