判斷一個點是否在多邊形內部


最近在處理圖片時遇到一個問題,如何判斷某個點是否落在一個多邊形(比如四邊形)區域里面?

在網上找到一個比較簡潔明了的方法,不過后來運行程序時發現計算量比較大(我是對圖片的每個像素都進行一次判斷),有更好的方法還望指點指點~

這個方法是通過向量的叉乘來判斷的:點如果落在順時針(或逆時針)向量同一邊,則點在多邊形內。如下圖,以順時針為例,分別計算向量 ABAOBCBOCDCODADO的叉乘,所得結果的 z 軸分量同號則說明點 O 在四邊形 ABCD 內部。

附上 Python 實現的代碼:

# 判斷點是否在四邊形內部,在四邊形內部返回1,否則返回0
# x、y為點的坐標,xv為四邊形的x坐標構成的向量,yv為四邊形的y坐標構成的向量
def inpolygon(x, y, xv, yv):
    z1 = (xv[1] - xv[0]) * (y - yv[0]) - (x - xv[0]) * (yv[1] - yv[0])
    z2 = (xv[2] - xv[1]) * (y - yv[1]) - (x - xv[1]) * (yv[2] - yv[1])
    z3 = (xv[3] - xv[2]) * (y - yv[2]) - (x - xv[2]) * (yv[3] - yv[2])
    z4 = (xv[0] - xv[3]) * (y - yv[3]) - (x - xv[3]) * (yv[0] - yv[3])
    if(z1 * z2 > 0 and z3 * z4 > 0 and z1 * z3 > 0): # z1, z2, z3, z4同號
        return 1 
    return 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM