Newer
Older
lynxi-casic-demo / test.py
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}")