void LineSegment3D::Expand(float Dist)
{
Vec3f Extension = Vec3f::Normalize(D) * Dist;
P0 -= Extension;
D += Extension * 2.0f;
}
float LineSegment3D::FindLineT(const Vec3f &P) const
{
SignalError("Not implemented");
return 0.0f;
}
float LineSegment3D::DistToPoint(const Vec3f &P) const
{
float t0 = Vec3f::Dot(D, P - P0) / Vec3f::Dot(D, D);
float distanceLine = Vec3f::Dist(P, P0 + t0 * D);
if ( (t0 >= 0) && (t0 <= 1) )
{
return distanceLine;
}
else
{
float dist1 = Vec3f::Dist(P, P0);
float dist2 = Vec3f::Dist(P, P0 + D);
return Math::Min(dist1, dist2);
}
}