python判斷平面內一個點是否在多邊形內
阿新 • • 發佈:2020-12-17
採用射線法就可以判斷一個點是否在多邊形內, 只需從點出發向右側水平做出一條射線,如果跟多邊形交點個數為奇數,則點在多邊形內,否則在多邊形外。看一張圖就可以看懂啦
圖片來自:https://www.jianshu.com/p/ba03c600a557
輸入:P點座標[px, py]
多邊形poly頂點座標[[x1, y1], [x2, y2], ..., [xn, yn]]
返回:True or False
首先,利用迴圈對多邊形每條邊做同樣對待。然後,判斷是否有跟點P水平右向的射線是否有交點,若有交點,flag就翻轉一次。
看程式:
def is_in_poly(p, poly): """ :param p: [x, y] :param poly: [[], [], [], [], ...] :return: """ px, py = p flag = False i = 0 length = len(poly) j = length - 1 while i < length: x1, y1 = poly[i] x2, y2 = poly[j] if (x1 == px and y1 == py) or (x2 == px and y2 == py): flag = True break if y1 < py <= y2 or y2 < py <= y1: x = x1 + (py - y1) * (x2 - x1) / (y2 - y1) if x == px: flag = True break elif x > px: # convert the flag flag = not flag j = i i += 1 return flag if __name__ == '__main__': point = [3, 3] poly = [[0, 0], [7, 3], [8, 8], [5, 5]] print(is_in_poly(point, poly))