class Point: def __init__(self, x, y): self.x = x self.y = y def is_point_in_polygon(px, py, polygon_points): """ 判断点 (px, py) 是否在多边形范围内 使用射线法判断点是否在多边形内 :param px: 点的 x 坐标 :param py: 点的 y 坐标 :param polygon_points: 多边形的顶点,polygon_points 是一个包含 4 个 Point 对象的列表 :return: True 如果点在多边形内,False 否则 """ n = len(polygon_points) inside = False for i in range(n): j = (i - 1) % n xi, yi = polygon_points[i].x, polygon_points[i].y xj, yj = polygon_points[j].x, polygon_points[j].y # 判断是否与边相交 intersect = ((yi > py) != (yj > py)) and (px < (xj - xi) * (py - yi) / (yj - yi) + xi) if intersect: inside = not inside return inside # 测试 if __name__ == "__main__": # 定义一个矩形多边形 (顺时针或逆时针) range_points = [ Point(270,480 ), Point(270,1920 ), Point(1080, 1920 ), Point(1080,480) ] # 测试点 test_points = [ (499, 1059), (1019, 1059) ] for px, py in test_points: result = is_point_in_polygon(px, py, range_points) print(f"Point ({px}, {py}) is inside polygon: {result}")