參考
1,將多邊形的座標存在在乙個陣列裡,首先我們需要取得該陣列在橫座標和縱座標的最大值和最小值,根據這四個值minx,maxx,miny,maxy,算出乙個四邊形,判斷目標點是否在這個四邊形內,不滿足,直接返回false,證明該目標點不在此多邊形內部。
if(m_pos.x < minx || m_pos.x > maxx || m_pos.y < miny || m_pos.y > maxy)
return false;
2,然後,在多邊形所規定的平面上,隨便定義乙個點,之後通過該點水平畫一條線,數數這條橫線和多邊形的邊相交多少次,看這條橫線穿越多邊形的次數是否為奇數,若為奇數,那麼該目標點在多邊形內,若為偶數,則在多邊形外。
// vert 代表多邊形有幾個點,testx, testy 代表待測目標點的座標,*vertx, *verty分別指向儲存多邊形橫縱座標陣列的首位址
// 每次計算都涉及到相鄰的兩個點和待測試點,然後考慮兩個問題:
// 1 被測試點的縱座標是否在本次迴圈所測試的兩個相鄰點縱座標範圍之內?
// verty[i] < testy < vert[j] 或者 vert[j] < testy < vert[i]
// 2, 待測點是否在i,j兩點之間的連線之下?
// 斜率公式,幾何和不等式
// 然後每次這兩個條件同時滿足的時候我們把返回的布林量取反。
int fun(int vert, float *vertx, float *verty, float testx, float testy)
return c;
}
判斷乙個座標點是否在不規則多邊形內部的演算法
在gis 地理資訊管理系統 中,判斷乙個座標是否在多邊形內部是個經常要遇到的問題。乍聽起來還挺複雜。根據w.randolph franklin 提出的pnpoly演算法,只需區區幾行 就解決了這個問題。假設多邊形的座標存放在乙個陣列裡,首先我們需要取得該陣列在橫座標和縱座標的最大值和最小值,根據這四...
判斷乙個座標點是否在不規則多邊形內部的演算法
在gis 地理資訊管理系統 中,判斷乙個座標是否在多邊形內部是個經常要遇到的問題。乍聽起來還挺複雜。根據w.randolph franklin 提出的pnpoly演算法,只需區區幾行 就解決了這個問題。假設多邊形的座標存放在乙個陣列裡,首先我們需要取得該陣列在橫座標和縱座標的最大值和最小值,根據這四...
判斷乙個點是否在乙個多邊形裡
判斷乙個點是否在乙個多邊形裡 一開始以為是個挺難的問題,但google了一下之後發現其實蠻簡單,所用到的演算法叫做 ray casting algorithm 中文應該叫 光線投射演算法 這是維基百科的描述 維基百科 簡單地說可以這麼判斷 從這個點引出一根 射線 與多邊形的任意若干條邊相交,累計相交...