判斷乙個點在多邊形的內外關係

2021-06-04 19:52:31 字數 793 閱讀 2819

已知乙個點和乙個多邊形,怎麼讓傻乎乎的計算機判斷出點在形內形外呢?這裡定義多邊形邊集也為多邊形內部。

常見的有兩種方法:

1.射線法。從這個點向右水平發出一條射線,如果交點個數是偶數則在形內,奇數在形外。有乙個弊端:如果這條射線恰好與這條邊重合了,交點個數怎麼算?常見的是將這條射線向上微移,不過不少人覺得這樣做很不放心。

2.環顧法。顧名思義,就是環顧一圈:從乙個頂點按照順時針順序環顧,旋轉的極角累加,如果等於360度就是形內、0度是形外,介於兩者之間即為邊上。這種方法很完美,但代價是其中計算除法和arccos的速度太慢,大約比射線法慢20倍。

我比較傾向射線法+微移,所謂微移只是意識上的微移,在**中射線是沒有變化的、判斷條件改變了一下:

1.叉積大於0

2.對於多邊形某條邊,設頂點高的為a,低的為b,則需要滿足a嚴格高於射線、b不高於(低於或等於)射線

同時滿足1和2就算作有乙個交點。為防止另一種bug的發生(不細講估計看的也有點兒不耐煩了),在遍歷邊的同時一旦發現此點在邊上停止計算,結果即為形內。這樣射線發也完美無bug了。

//這裡使用了基礎函式的point定義,dblcmp、cross、betweenmp函式

//以後凡是計算幾何的**都會用到那篇文章裡的東西,不再重複

bool inpolyon(point a)

else if (k>0 && dblcmp(d[i].y-a.y)==1 && dblcmp(d[j].y-a.y)<=0)        t++;

}if (t%2)        return true;

return false;}

點在多邊形內外的判斷

點與多邊形的的位置關係 點在形內 點在形外 點在邊界上 判斷方法 射線法 轉角法 射線法 通常取x軸正方向為射線方向 奇數次相交,則在形內 偶數次相交,則在形外 對於凹多邊形也是可以的 射線法的特殊情況 與定點相交 與其相鄰的端點或者線段在射線的異側,則認為是相交 否則不認為相交 與邊部分重合 縮點...

演算法 點在多邊形內外判斷

射線發 射線發判斷點是否在多邊形內部 p 待判斷的點。格式 poly 多邊形定點,陣列成員格式相同 private string raycasting point p,listpoly 判斷線段兩短點是否在射線兩側 if sy py sy py tyif x px return flag in ou...

多邊形問題( 判斷乙個點在不在多邊形內)

試題一 災區已經非常困難,災民需要帳篷 衣物 食品和血漿。可通往災區的道路到處都是塌方,70 以上的路面損壞,橋梁全部被毀。中國空軍立即啟動應急預案,展開史上最大強度非作戰空運行動,準備向災區空投急需物資。由於餘震不斷,天氣惡劣,怎樣知道空投的物資是否落在某災區的區域內呢?經過空中觀測,某災區為一凸...