2012-06-21

VBA如何判斷某點位是否一個封閉區域中?

最近遇到在AutoCAD中,如何判斷某個已知點位是否在一個已知的封閉多邊形中?


查了一下程式函數,沒這個;至於數學公式嘛!應該有吧,不過我不知道。就改用比較笨的方式,利用圖解法來處理。

基本上,點與已知多邊形的關係,有在區域內,區域外及線上(判斷是否在線上,又是一個頭痛的問題,因為要處理弧線段跟直線原理不同,還在研究中..)。

作法大致是這樣的:

1.建立一條由該點放射出去的放射線。

2. 利用IntersectWith方法檢核交叉點點數。

3. 先排除點是否在線上。

3.
當點數=奇數則為區域內點
點數=0或偶數則為區域外點。





4. 特殊情況檢核:
放射線是否經過角點
若是,則奇數可能又變成是區域外
偶數可能又變成區域內。


 

我之所以說可能是"可能也不是",因為可能同時穿越兩個角點、三個角點.....以及射線與某邊重疊的問題。

這樣程式可會沒完沒了,只是檢核一個點的狀況就....,乾脆用作弊的方式(註:這樣還是有風險,只是風險降低), 就是三選二,由該點放射三個任意角度的放射線,少數服從多數 ><







沒有留言:

張貼留言