public static float SqrDistanceToPoint(Vector2 point, LineSegment2D segment) { Vector2 diff = point - segment.Center; float param = math.dot(segment.Direction, diff); Vector2 closestPoint; if (-segment.Extent < param) { if (param < segment.Extent) { closestPoint = segment.Center + param * segment.Direction; } else { closestPoint = segment.Point1; } } else { closestPoint = segment.Point0; } diff = closestPoint - point; return(diff.sqrMagnitude); }
public static float DistanceToPoint(this LineSegment2D lineSegment, Vector2 point) { return(Mathf.Sqrt(SqrDistanceToPoint(point, lineSegment))); }