計算任意多邊形的面積

2022-03-27 06:22:09 字數 1435 閱讀 2577

對於凸多邊形,很容易計算,如下圖,以多邊形的某一點為頂點,將其劃分成幾個三角形,計算這些三角形的面積,然後加起來即可。已知三角形頂點座標,三角形面積可以利用向量的叉乘來計算。

對於凹多邊形,如果還是按照上述方法劃分成三角形,如下圖,多邊形的面積 = s_abc + s_acd + s_ade, 這個面積明顯超過多邊形的面積。

我們根據二維向量叉乘求三角形abc面積時,利用的是

這樣求出來的面積都是正數,但是向量叉乘是有方向的,即

是有正負的,如果把上面第三個公式中的絕對值符號去掉,即

,那麼面積也是有正負的。反應在上面第二個圖中,s = s_abc + s_acd + s_ade,如果s_abc和s_ade是正的,那麼s_acd是負的,這樣加起來剛好就是多邊形的面積。對於凸多邊形,所有三角形的面積都是同正或者同負。

當o點為原點時,根據向量的叉積計算公式,各個三角形的面積計算如下:

s_oab = 0.5*(a_x*b_y - a_y*b_x)   【(a_x,a_y)為a點的座標】

s_obc = 0.5*(b_x*c_y - b_y*c_x)

s_ocd = 0.5*(c_x*d_y - c_y*d_x)

s_ode = 0.5*(d_x*e_y - d_y*e_x)

s_oea = 0.5*(e_x*a_y - e_y*a_x)

**如下

struct point2d

};//計算任意多邊形的面積,頂點按照順時針或者逆時針方向排列

double computepolygonarea(const vector&points)

該演算法還可以優化一下,對上面的式子合併一下同類項

s = s_oab + s_obc + s_ocd + s_ode + s_oea =

0.5*(a_y*(e_x-b_x) + b_y*(a_x-c_x) + c_y*(b_x-d_x) + d_y*(c_x-e_x) + e_y*(d_x-a_x))

這樣減少了乘法的次數,**如下:

struct point2d

};//計算任意多邊形的面積,頂點按照順時針或者逆時針方向排列

double computepolygonarea(const vector&points)

任意多邊形面積計算

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

任意多邊形面積

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

任意多邊形面積的計算

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