def get_shadow_polygon(poly: "BasePolygon", normal: Vector2d) -> Tuple[float, float]: min_shadow = float("inf") max_shadow = -float("inf") for point in poly.points: product = normal.dot_product(point) min_shadow = min(min_shadow, product) max_shadow = max(min_shadow, product) return min_shadow, max_shadow
def get_support_point(self, direction: Vector2d) -> Vector2d: support_point = None max_product = -1 for point in self.points: product = direction.dot_product(point) if product > max_product: max_product = product support_point = point return support_point