public static Distance DistanceTo(this Point2D point, Segment2D segment) => point.ProjectedSignedDistanceAlong(segment.AsLine()) < Distance.Zero ? point.DistanceTo(segment.BasePoint) : point.ProjectedSignedDistanceAlong(segment.Reverse().AsLine()) < Distance.Zero ? point.DistanceTo(segment.EndPoint) : point.DistanceTo(segment.AsLine());