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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多边形面积

發(fā)布時間:2025/5/22 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多边形面积 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

多邊形面積

多邊形通常分為凸多邊形凹多邊形

計算多邊形面積有幾種好用的算法

其核心思想都是把一個n(n>=3)邊形轉(zhuǎn)化為n-2個三角形,然后計算

一:海倫公式

最常見的多邊形面積計算公式

?

此公式表達式為:

S= sqrt( p*(p-a)*(p-b)*(p-c))

其中p為此三角形的半周長,而a,b,c為三角形三邊長

若三角形三點為x1,y1,x2,y2,x3,y3,

即p=(a+b+c)/2

a=sqrt((x2-x1)2+(y2-y1)2)

b=sqrt((x3-x2)2+(y3-y2)2)

c=sqrt((x3-x1)2+(y3-y1)2)

?

可能海倫公式就是?的一個變形而已。。。所以覺得意義也是等價的。。。

、

然后,我們再來進一步思考,這個東西和內(nèi)心的關系:

對三角形的內(nèi)切圓來說,如前面 白如冰所說會很自然聯(lián)想到內(nèi)切圓:


如此,我們發(fā)現(xiàn),內(nèi)切圓的半徑實際上可以被 半周長 和 a,b,c表示了。
缺點:適用于邊數(shù)很小的情況,一旦邊數(shù)增多,計算繁瑣,損失精度

C++代碼:

1 typedef struct 2 { 3 int x; 4 int y; 5 }Point; 6 Point point[N]; 7 int Area(point[a],point[b],point[c]) 8 { 9 double area; 10 double la,lb,lc; 11 la=sqrt((point[b].x-point[a].x)*(point[b].y-point[a].y)); 12 lb=sqrt((point[c].x-point[b].x)*(point[c].y-point[b].y)); 13 lb=sqrt((point[c].x-point[a].x)*(point[c].y-point[a].y)); 14 p=(la+lb+lc)/2; 15 area=sqrt(p*(p-la)*(p-lb)*(p-lc)); 16 return area; 17 }

?

二:向量計算法

此方法可查看此資料:

https://files.cnblogs.com/files/tenjl-exv/%E5%A4%9A%E8%BE%B9%E5%BD%A2%E9%9D%A2%E7%A7%AF.ppt

有關資料證明:

我們都知道已知A(x1,y1)、B(x2,y2)、C(x3,y3)三點的面積公式為

? ? ? ? ? ? ? ? ? ?|x1 x2 x3|
S(A,B,C) =? |y1 y2 y3| * 0.5 = [(x1-x3)*(y2-y3) - (x2-x3)*(y1-y3)] /2
? ? ? ? ? ? ? ? ? ?|1? ? 1? 1 |

(當三點為逆時針時為正,順時針則為負的)

對于多邊形A1A2A3、、、An(順或逆時針都可以)

設平面上有任意的一點P,則有:

S(A1,A2,A3,、、、,An)?= abs(S(P,A1,A2) + S(P,A2,A3)+、、、+S(P,An,A1))

P可以任意取點

如果P取多邊形外一點,且取(0,0)時

設點順序 (x1 y1) (x2 y2) ... (xn yn),則面積等于

? ? ? ? ? ? ?|x1 y1|? ? |x2 y2|? ? ? ? ? ? ? |xn yn|
S= abs( |? ? ? ? | + |? ? ? ? | + ...... + |? ? ? ? ?| ) /2
? ? ? ? ? ? ?|x2 y2|? ? |x3 y3|? ? ? ? ? ? ? |x1 y1|
?
其中

|x1 y1|?
|? ? ? ? ?| ===? x1*y2 - y1*x2
|x2 y2|?

?

因此面積公式展開為:

? ? ? ? ? ? ?|x1 y1|? ? ?|x2 y2|? ? ? ? ? ? ? |xn yn|

S=abs(? |? ? ? ? | +? |? ? ? ? | + ...... +? |? ? ? ? | )? = abs(x1*y2-y1*x2+x2*y3-y2*x3+...+xn*y1-yn*x1) /2
? ? ? ? ? ? ?|x2 y2|? ? ?|x3 y3|? ? ? ? ? ? ? |x1 y1|

C++代碼如下:

int x[100]; int y[100];double Area(int *x,int *y,int n) {double s=0;for(int i=0;i<n;i++){int j=(i+1)%n;s+=x[i]*y[j];s-=x[j]*y[i];}s/=2;return (s>0?s:-s); }// area=Area(x,y,n);// n為點的個數(shù)

?

轉(zhuǎn)載于:https://www.cnblogs.com/tenjl-exv/p/8011513.html

總結

以上是生活随笔為你收集整理的多边形面积的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。