Real DistVector3Segment3<Real>::GetSquared (Real fT,
    const Vector3<Real>& rkVelocity0, const Vector3<Real>& rkVelocity1)
{
    Vector3<Real> kMVector = m_rkVector + fT*rkVelocity0;
    Vector3<Real> kMOrigin = m_rkSegment.Origin + fT*rkVelocity1;
    Segment3<Real> kMSegment(kMOrigin,m_rkSegment.Direction,
        m_rkSegment.Extent);
    return DistVector3Segment3<Real>(kMVector,kMSegment).GetSquared();
}
Real DistRay2Segment2<Real>::GetSquared (Real fT,
    const Vector2<Real>& rkVelocity0, const Vector2<Real>& rkVelocity1)
{
    Vector2<Real> kMOrigin0 = m_pkRay->Origin + fT*rkVelocity0;
    Vector2<Real> kMOrigin1 = m_pkSegment->Origin + fT*rkVelocity1;
    Ray2<Real> kMRay(kMOrigin0,m_pkRay->Direction);
    Segment2<Real> kMSegment(kMOrigin1,m_pkSegment->Direction,
        m_pkSegment->Extent);
    return DistRay2Segment2<Real>(kMRay,kMSegment).GetSquared();
}
Real DistSegment3Rectangle3<Real>::Get (Real fT,
                                        const Vector3<Real>& rkVelocity0, const Vector3<Real>& rkVelocity1)
{
    Vector3<Real> kMOrigin = m_pkSegment->Origin + fT*rkVelocity0;
    Vector3<Real> kMCenter = m_pkRectangle->Center + fT*rkVelocity1;
    Segment3<Real> kMSegment(kMOrigin,m_pkSegment->Direction,
                             m_pkSegment->Extent);
    Rectangle3<Real> kMRectangle(kMCenter,m_pkRectangle->Axis,
                                 m_pkRectangle->Extent);
    return DistSegment3Rectangle3<Real>(kMSegment,kMRectangle).Get();
}