日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

凸多边形面积_C++计算任意多边形的面积

發布時間:2024/7/5 c/c++ 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 凸多边形面积_C++计算任意多边形的面积 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
任意多邊形的面積計算_拾憶楓靈的博客-CSDN博客?blog.csdn.net計算任意多邊形的面積 - tenos - 博客園?www.cnblogs.com完美解決計算3D空間任意多邊形面積_Studiouss的博客-CSDN博客?blog.csdn.net求多邊形面積公式(已知頂點坐標)_揚帆起航-CSDN博客?blog.csdn.net

任意給出一個三角形Δ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++计算任意多边形的面积的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。