1. 程式人生 > >由頂點坐標計算任意多邊形面積

由頂點坐標計算任意多邊形面積

class mage tro 順時針 面積 因此 習題 show hdu2036

我們知道,如果三角形的一個頂點在原點,另兩點A(x1 , y1)和B(x2 , y2)

技術分享圖片

則其面積可以表示為
SABC =0.5× |OA|×|OB|×sin(∠AOB)
=0.5×|OA×OB|
=0.5×|(x1,y1)×(x2,y2)|
=0.5×[(x1y2)-(y1x2)]

以下圖中的三角形ABC為例,欲求SABC

技術分享圖片

從原點,將ABC以向量形式表示

技術分享圖片

因此SABC = SOBC-SOAC-SOAB
=SABC = SOBC + (-SOAC) + (-SOAB)

這樣直接求ABC的面積轉化為了求三個部分三角形的面積和,而分割出來的每個三角形的都有一個頂點為原點,且另外兩個點信息均已知。

由於存在逆時針計算或者順時針計算頂點的問題,所以上式中的正負號代表了正面積和反面積,不過不需要特別考慮,因為總大小是一樣的,只需要求絕對值即可。

所以上述三角形面積
SABC=0.5×|(x1y2-x2y1)+(x2y3-y2x3)+(x3y1-y3x1)|

擴展到多邊形
S = 0.5×|(x1y2-x2y1)+(x2y3-y2x3)+(x3y4-y3x4) + ...... + (xny1-ynx1)|

對於凹多邊形也適用,凹陷的部分會被計算為負面積被減掉。

練習題:(HDU2036)[http://acm.hdu.edu.cn/showproblem.php?pid=2036]

由頂點坐標計算任意多邊形面積