網頁版幾何畫板開發筆記(十) 計算任意帶交錯多邊形的面積

對於通常不帶交錯的多邊形, 有一個簡單的方法能夠計算出其面積, 見於網上不少文章都有, 如:
http://wenku.baidu.com/link?url=h48pnBshRsf0QzG9Cvgp22PXNqbpfX97uyfkDceUwm9zfECjmm5mS56Yj4zNa_zpZs5Fi36O2KOKDansWgCGMt5wCpErZ-ttAldF_p7zln3 算法

帶交錯的五邊形

如圖所示的一個帶交錯的五邊形, 不算內部那個被交錯部分的面積的算法, 思路以下: 測試

1. 已知全部的邊, 計算這些邊相互的交點(如圖所示, 這些交點爲I1,I2,I3,I4,I5). 若是邊之間沒有
交點, 則當作普通多邊形計算便可. url

2. 將全部的頂點和交點按照y座標自上而下的排序, 過這些點作水平線, 這些水平線分割整個多邊形
爲多個條, 如圖所示是兩個條帶的例子. 排序

3. 能夠證實(嚴格證實我不太擅長, 下面一會略略說下), 條帶之間切割的邊是偶數條. 將這些邊從左
到右排序並從0開始編號, 則偶數編號的邊&奇數編號的邊 構成的梯形(或三角形)算在面積中. 反之
的, 不算在面積中. get

4. 累加全部條帶, 全部算在內的梯形或三角形的面積, 便可獲得多邊形的總面積. it

在這個圖中的例子, 條帶1 中有三角形 AMN;
條帶2 中有梯形 MNJI5, 三角形 CI5K 算在面積內. 程序

這種方法最終計算出來的面積, 是不包含中間I1-I5 構成的交錯部分的. 欲計算含該部分的,
我思考有另外一種算法更合適一些. 但此算法, 也許適當改進一些, 也能計算吧. 方法

  下面簡單說明(3)中偶數條邊的證實. 從第一個條帶開始, 上面有且只有一個點設爲A, 則A必有
兩條邊(一條入邊, 一條出邊)與條帶的下邊界相交(如圖中交點M,N), 這樣構成兩條邊, 是偶數.
  而下一個條帶, 這種交點有偶數個, 每一個交點有一條邊; 又新的一個點也有兩條邊, 加起來
仍然是偶數條邊.
  若是頂點就是條帶與邊的交點, 則此頂點的入邊必算在前一個條帶, 此條帶中只有一條邊, 這樣
加起來仍然是偶數條邊.
  還有別的狀況, 如條帶的上下邊界剛好與邊重合, 則出/入抵消, 還是偶數條. im

我編寫了一個簡單程序, 用如上的五角星測試了此算法, 基本還算對的, 可是估計浮點數計算會
有偏差, 在邊界條件的狀況下可能要特別注意. img

若是你看到此算法有問題, 可幫忙評論或郵件給 liujunxing@chinaflc.com , 謝謝~!

相關文章
相關標籤/搜索