예제 #1
0
//=============================================================================
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;
}
예제 #2
0
 Ray2 Ray2::Transform(const Matrix3 &transform) const
 {
    return Ray2(m_origin.Transform(transform), m_direction.TransformVector(transform));
 }