凸多边形面积_C++计算任意多边形的面积
任意給出一個三角形Δ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
struct Point2d {double x;double y;Point2d(double xx, double yy): x(xx), y(yy){} };//計算任意多邊形的面積,頂點按照順時針或者逆時針方向排列 double ComputePolygonArea(const vector<Point2d> &points) {int point_num = points.size();if(point_num < 3)return 0.0;double s = 0;for(int i = 0; i < point_num; ++i)s += points[i].x * points[(i+1)%point_num].y - points[i].y * points[(i+1)%point_num].x;return fabs(s/2.0); }或者:
struct Point2d {double x;double y;Point2d(double xx, double yy): x(xx), y(yy){} };//計算任意多邊形的面積,頂點按照順時針或者逆時針方向排列 double ComputePolygonArea(const vector<Point2d> &points) {int point_num = points.size();if(point_num < 3)return 0.0;double s = points[0].y * (points[point_num-1].x - points[1].x);for(int i = 1; i < point_num; ++i)s += points[i].y * (points[i-1].x - points[(i+1)%point_num].x);return fabs(s/2.0); }或者:
<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> 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的凸多边形面积_C++计算任意多边形的面积的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 福州大学c语言考试答案,C语言练习模拟考
- 下一篇: 智慧交通day02-车流量检测实现05: