判断多边形和多边形是否相交

python实现

思路参考:https://bbs.csdn.net/topics/391070188

思路:判断多边形、线段是否和另一多边形相交,可先判断他们的控制矩形是否相交。然后再做点是否在多边形中的判断。【多边形的控制矩形,即能围住多边形的最小矩形。】

当矩形的边与多边形的顶点相交的时刻,不记为两图形相交。

可用的测试代码如下:

# !/usr/bin/python3.6
# --coding:utf-8--
# 多边形座标值
lsP = [(238, 204), (1079, 216), (1201, 662), (499, 649), (138, 469)]
polygon_x_max, polygon_x_min, y_temp = max(lsP)[0], min(lsP)[0], [i[1] for i in lsP]
polygon_y_max, polygon_y_min = max(y_temp), min(y_temp)
# 矩形座标值
rectangle_x_max, rectangle_x_min = 1117, 785
rectangle_y_max, rectangle_y_min = 716, 366
rectangle_points = [[rectangle_x_min, rectangle_y_min], [rectangle_x_max, rectangle_y_min], [rectangle_x_min, rectangle_y_max], [rectangle_x_max, rectangle_y_max]]


oddNodes = False
# 判断矩形与多边形控制矩形是否相交
# for point in rectangle_points:
if (polygon_x_min < rectangle_x_max < polygon_x_max or polygon_x_min < rectangle_x_min < polygon_x_max) and (polygon_y_min < rectangle_y_min < polygon_y_max or polygon_y_min < rectangle_y_max < polygon_y_max):
    # 判断矩形顶点与多边形边的关系
    for point in rectangle_points:
        x, y = point[0], point[1]
        j = len(lsP) - 1
        for i in range(len(lsP)):
            if lsP[i][1] < y < lsP[j][1] or lsP[j][1] < y < lsP[i][1] and x >= lsP[i][0] or x >= lsP[j][0]:
                if (lsP[i][0] + (y - lsP[i][1]) / (lsP[j][1] - lsP[i][1]) * (lsP[j][0] - lsP[i][0]))<x:
                    oddNodes = True
            j = i
print(oddNodes)

最后一个if判断的思路,利用两个三角形的比例关系求出交点在起点的左边还是右边;用图去理解如下。

这是我看到别人博客画的很优秀的图,顺手复制过来的,哈哈…

别人博客:https://www.jianshu.com/p/ba03c600a557

如果有其他好的想法,还请不吝赐教~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章