def distance_and_point(self, point: Point, squared: bool = False) \ -> Tuple[float, Point]: """Calculate smallest distance from the way to a point. Returns the smallest distance and the closest point in a tuple. """ result, closest = min((point.distance_to_segment(p, v, squared=True) for p, v in zip(self.points(), self.vectors())), key=itemgetter(0)) return (result if squared else sqrt(result), closest)
def distance(self, point: Point, squared: bool = False) -> float: """Calculate smallest distance from the way to a point.""" result, _ = min((point.distance_to_segment(p, v, squared=True) for p, v in zip(self.points(), self.vectors())), key=itemgetter(0)) return result if squared else sqrt(result)