任意多邊形的面積計算

任意給出一個三角形ΔABC,設其頂點座標分別爲A(x1, y1),B(x2, y2),C(x3, y3),那麼根據線性代數的知識,ΔABC的有向面積可表示爲:


其中,ΔABC頂點A、B、C逆時針給出時有向面積爲正,順時針給出時有向面積爲負。如圖1所示,S∆ABC>0、S∆ABD<0.


圖1

我們知道任意的多邊形都可以分割成多個三角形,根據以上三角形面積公式就可以求出任意多邊形的面積。如圖2所示的六邊形頂點座標分別爲O(x0, y0),A(x1, y1),B(x2, y2),C(x3, y3),D(x4, y4),E(x5, y5),則其面積可以表示爲四個三角形面積之和:S=S∆OAB+S∆OBC+S∆OCD+S∆ODE

其中:

所以



圖2

在這裏,前文給出的多邊形示例是一個凸多邊形,那麼這一結論適用於凹多邊形嗎?下面我們看看如圖3所示的凹多邊形。

圖3

按照上面的思路,這裏的凹多邊形面積表示爲:S=S∆OAB+S∆OBC+S∆OCD,從前面介紹可以知道

S∆OAB=-S∆OBA<0,所以很明顯上式是成立的,即此公式也適用於凹多邊形。

經過以上分析,給出任意一個多邊形,其頂點座標依次爲(x0,y0),(x1,y1),(x2,y2),...,(xn,yn)(其中n=2,3,4,…),則其面積可表示爲:


換句話說,若已知多邊形邊上的每一點座標,我們就可以求出該多邊形的面積,包括如圖4所示的曲線圖形,當從O點到A點到O點的曲線上每一點座標都已知時就能求出該曲線圖的面積。

圖4

下面是代碼示例

<script>
    function square(x,y) {
//數組x,y分別按順序存儲各點的橫、縱座標值
        var sum0=0;
        for (var i = 0; i < x.length - 1; i++) {
            sum0 += (x[i] * y[i + 1] - x[i + 1] * y[i]);
        }
        var square = (Math.abs(sum0 + (x[i] * y[0]) - (x[0] * y[i]))) / 2;
        return square;
    }
</script>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章