std::pair< T, T > intersection( const ray<T,2u>& ray, const circle<T>& circle ) { // check for no intersection const T a = dot( ray.direction(), ray.direction() ); const T b = T(2.) * sum( ray.direction() * ( ray.source() - circle.center() ) ); const T c = dot( circle.center(), circle.center() ) + dot( ray.source(), ray.source() ) - T(2.) * dot( ray.source(), circle.center() ) - sqr( circle.radius() ); return solve_quadratic_equation(a,b,c); }
ray(const ray<T,Dim>& r) : m_src( r.source() ), m_dir( r.direction() ) { }