判斷多邊形和多邊形是否相交

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

如果有其他好的想法,還請不吝賜教~

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