//============================================================================= bool Intersect (IntersectInfo2 & out, const Sphere2 & s0, const Vector2 & v0, const Sphere2 & s1, const Vector2 & v1) { const Vector2 v = v0 - v1; const float32 vLen = Length(v); if (Intersect(out, Ray2(s0.center, v / vLen), Sphere2(s1.center, s0.r + s1.r))) { if (out.time <= vLen) { // sphere center at time of collision const Point2 p0 = s0.center + v0 * out.time; const Point2 p1 = s1.center + v1 * out.time; // TODO: compute the actual point of contact return true; } } return false; }
Ray2 Ray2::Transform(const Matrix3 &transform) const { return Ray2(m_origin.Transform(transform), m_direction.TransformVector(transform)); }