只適用於簡單多邊形(沒有自相交點)。從P點開始的射線穿過多邊形邊界次數,多邊形的邊界將多邊形分爲內部和外部。若是是偶數在多邊形外部,不然奇數在多邊形內部。以下圖所示Pin爲內部點,Qout爲外部點,n爲經過邊界次數。測試
另若是射線通過頂點的時候,一個標準的預約是在左邊界或下邊界的點認定多邊形內部,在右邊界或上邊界的點認爲在多邊形外部。例如兩個不一樣多邊形共享一個公共邊,那麼在這條邊上點會在一個多邊形內部而在另外一個多邊形外部。這樣能夠避免了在計算機圖形顯示中會出現的一些問題。.net
穿越規則測試規則:blog
1. 方向向上的邊包括其開始點,不包括其終止點。get
2.方向向下的邊不包括其開始點,包括其終止點。it
3.水平邊不參與穿越測試(前提是選擇水平的、向點P右邊延伸的射線)。方法
4.射線和多邊形的邊焦點必須嚴格在P點右側(規定了多邊形右邊邊界上的點在多邊形外部,在左邊邊界上的點在多邊形內部)。im
知足以上規則計算2個線段是否相交。img
轉角法很是簡單:按照多邊形頂點逆時針順序,從P點到頂點Vi分別作連線,其中αi爲Vi和Vi+1之間的夾角。若是α角度逆時針爲正,順時針爲負,這樣全部到頂點作連線之間夾角和爲(環繞數)0,這點P在多邊形外部,不然在內部。計算機
如上圖所示P點到各個頂點連線夾角和爲0,即P在多邊形外部。co
如上圖所示,角度之和 > 0 爲在多邊形內部。
環繞數推導公式 wn = 1/2π(α0 + α1 + ...... + αi) i ∈[0, n-1] 推導 wn = 1/2π(PVi*PVi+1/|PVi||PVi+1|) i ∈ [0, n-1]。該公式arccos比較耗時。
另兩種判斷方法:
1. 從P點向右作射線R,若是邊從射線R下方跨到上方,那麼穿越+1,若是從上方跨到下方,則是-1。最終和爲wn環繞數。以下圖所示:
2. 這種方法沒必要去計算射線和邊的交點,但須要判斷點P是否在邊的左邊,但對於方向向上和向下的邊的判斷與是否在左邊規則不一樣。對於方向向上的邊,若是穿過設想到達P的右邊,那麼P是在邊的左側;方向向下的邊若是穿越射線的正方向,那麼P在邊的右邊(意思是說判斷點P與邊的關係,而不是相對座標系內位置)。
如上圖a 和圖b中P點都是位於射線左側,可是向上和向下方向的邊P點位於不一樣位置。
僞代碼以下:須要注意的是一樣須要準守射線法中一、二、4項規則。