1. 程式人生 > >任意多邊形面積計算

任意多邊形面積計算

原理介紹

任意多邊形的面積可由任意一點與多邊形上依次兩點連線構成的三角形向量面積求和得出。

       向量面積=三角形兩邊向量的叉乘。

       如下圖:

按定理,多邊形面積由P點與A-G的各頂點連線所構成的三角形向量面積構成,假定多邊形頂點座標順序為A-G,逆時針為正方向,則有如下結論:

PAB,PBC,PCD均為順時針,面積為負;

PDE,PEF,PFG,PGA均未逆時針,面積為正;

但無論正負,均可通過P點與頂點連線的向量叉乘完成,叉乘結果中已包含面積的正負。

2-程式設計

採用C++的vector(動態陣列)儲存頂點座標。

為方便計算,直接將P點定為原點(0,0),則多邊形頂點xy座標即為向量在xy上分量。

迴圈計算多邊形頂點座標每一點與下一點之間的線段,及這兩點與P連線的向量所圍成的三角形面積。

計算面積的函式程式碼如下:

複製程式碼
iArea=iArea+(vecPoly[iCycle].x*vecPoly[(iCycle+1) % iCount].y-vecPoly[(iCycle+1) % iCount].x*vecPoly[iCycle].y);
int intAreaCalc(vector<myPoint> &vecPoly)
{
    int iCycle,iCount,iArea;
    iCycle=0;
    iArea=0;
    iCount=vecPoly.size();

    
for(iCycle=0;iCycle<iCount;iCycle++) { iArea=iArea+(vecPoly[iCycle].x*vecPoly[(iCycle+1) % iCount].y-vecPoly[(iCycle+1) % iCount].x*vecPoly[iCycle].y); } return abs(0.5*iArea); }
複製程式碼

注意,要注意的是最後一個頂點,要與第一個頂點練成三角形,可將迴圈變數對頂點總數求同餘,則迴圈過程中的最後一點+1後,自然會成為第一個頂點,上述程式碼中的“% iCount”即為解決此問題。

完整程式,請下載工程檔案。

 http://files.cnblogs.com/vbspine/sdkPoly.rar

Ps:上述程式在Win7x64,VS2008環境下編譯通過。 

  原文地址:http://www.cnblogs.com/vbspine/archive/2013/03/28/2987818.html