任意多邊形面積的計算

2021-07-05 16:10:19 字數 1685 閱讀 6280

原理論述1:

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

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

如下圖:

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

pab,pbc,pcd均為順時針,面積為負;

pde,pef,pfg,pga均未逆時針,面積為正;

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

原理論述2:

設ω是m邊形

(如下圖

),頂點

沿邊界正向排列,

,座標依次為

建立ω的多邊形區域向量圖。

由圖知座標原點與多邊形任意相鄰的兩個頂點構成乙個三角形,而三角形的面積可由三個頂點構成的兩個平面向量的外積求得。

任意多邊形的面積公式

多邊形計算公式的計算和原點的選取沒有關係,通常可以選點(0,0)或者多邊形的

第乙個點(這個時候比較直觀了,看起來就是把多邊形分成乙個個三角形和加起來,讀者自己可以畫個圖)

就可以了。

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

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

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

計算面積的函式**如下:

c++的實現

iarea=iarea+(vecpoly[icycle].x*vecpoly[(icycle+1) % icount].y-vecpoly[(icycle+1) % icount].x*vecpoly[icycle].y);

int intareacalc(vector&vecpoly)

return abs(0.5*iarea);

}

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

c#的實現

#region calculatearea function

/// /// 計算多邊形面積的函式

/// (以原點為基準點,分割為多個三角形)

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

///

///

///

public static float calculatearea(listvectorpoints)

return (float)math.abs(0.5 * iarea);

}#endregion

參考文章

任意多邊形面積計算

任意多邊形的面積可由任意一點與多邊形上依次兩點連線構成的三角形向量面積求和得出。向量面積 三角形兩邊向量的叉乘。如下圖 按定理,多邊形面積由p點與a g的各頂點連線所構成的三角形向量面積構成,假定多邊形頂點座標順序為a g,逆時針為正方向,則有如下結論 pab,pbc,pcd均為順時針,面積為負 p...

任意多邊形面積

給定多邊形的頂點座標 有序 讓你來求這個多邊形的面積,你會怎麼做?我們知道,任意多邊形都可以分割為n個三角形,所以,如果以這為突破點,那麼我們第一步就是把給定的多邊形,分割為數個三角形,分別求面積,最後累加就可以了,把多邊形分割為三角形的方式多種多樣,在這裡,我們按照如下圖的方法分割 s點作為起始點...

計算任意多邊形的面積

以三角形為例設a x1,y1 b x2,y2 c x3,y3 由a b c a 按逆時針方向轉。設三角形的面積為s 則s 1 2 下面行列式 x1 y1 1 x2 y2 1 x3 y3 1 s 1 2 x1y2 1 x2y3 1 x3y1 1 x1y3 1 x2y1 1 x3y2 1 即用三角形的三...