二維幾何 點在多邊形內判定

2021-08-29 16:07:50 字數 771 閱讀 8672

直觀的講,乙個多邊形就是二維平面上被一系列首尾相接、閉合的折線段圍成的區域。在程式中一般用頂點陣列表示。其中各個頂點按照逆時針順序排列。

給定乙個多邊形和乙個點,如何判斷該點是否在多邊形內?主要有兩種方法,乙個是射線法,乙個是轉角法。我們這裡主要介紹轉角法,因為這個方法比射線法更方便。

基本思想就是看多邊形相對於這個點轉了多少度。我們把多邊形每條邊的轉角加起來,如果是360度,說明在多邊形內,如果是0度,說明在多邊形外,如果是180度,說明在多邊形的邊界上。

但是如果直接按照定義實現,需要計算大量的反三角函式,不僅速度慢,而且容易產生精度誤差。所以我們可以假想有一條向右的射線,統計多邊形穿過這條射線正反多少次,把這個數記為繞數wn(winding number),逆時針穿過時,wn加1,順時針穿過時,wn減1.

注意在程式實現的時候,判斷是否穿過,以及穿過方向時,需要用叉積判斷輸入點在邊的左邊還是右邊。

具體實現:

typedef vectorpolygon ;  //定義多邊形,為許多頂點的集合
int ispointinpolygon(point p, const polygon &poly)

if(wn) //內部

return 1;

else //外部

return 0;

}

幾何基礎之點在多邊形內的判斷

1.判斷點在三角形的內外 三角形面積計算公式 2.判斷點在多邊形的內外 方法一 掃瞄法 以p點做一條射線,讓其與多邊形乙個頂點相交,再判斷是否與多邊形上點共線當然這個點不可能是頂點,就是說作一條射線,與多邊形相交一點就認為在裡面,相交0或偶數點就在外面 仔細想想為什麼偶數點就一定可以 方法二 叉乘判...

點在多邊形內的判斷

凸多邊形考慮叉積,因為在凸多邊形中,我們假設圍繞多邊形走一圈,如果點在多邊形內,那麼這個點一直在我們的同一側。按照這個性質,我們順時針或者逆時針處理多邊形上的點,叉積運算,算參考的和多邊形上連續的兩個點,如何叉積的結果符號發生變化,那麼不再多邊形內。double det point p1,point...

判斷點在多邊形內演算法

點和多邊形關係的演算法實現 好了,現在我們已經了解了向量叉積的意義,以及判斷直線段是否有交點的演算法,現在回過頭看看文章開始部分的討論的問題 如何判斷乙個點是否在多邊形內部?根據射線法的描述,其核心是求解從p點發出的射線與多邊形的邊是否有交點。注意,這裡說的是射線,而我們前面討論的都是線段,好像不適...