您的位置:首页 > 其它

计算多边形面积

2013-06-02 19:46 204 查看

计算多边形面积

三角形的面积

1、在解析几何里, △ABC的面积可以通过如下方法求得:

点坐标 => 边长 => 海伦公式 => 面积
海伦公式: S=sqrt[p(p-a)(p-b)(p-c)],其中p=(a+b+c)/2(p为三角形的半周长)
2、 计算几何的方法

△ABC的面积就是“向量AB”和“向量AC”两个向量叉积的绝对值的一半。其正负表示三角形顶点是在右手系还是左手系。

Area(A,B,C)= 1/2 * (↑AB) × (↑AC)

得到是有向面积(有正负)

凸多边形的三角形剖分

1、 以 P1为扇面中心,连接P1Pi就得到N-2个三角形,由于凸性,保证这些三角形全在多边形内,那么,这个凸多边形的有向面积:

A=sigma(Ai) (i=1…N-2)



2、 我们能把多边形分成N-2个三角形,为什么不能分成N个三角形呢? 比如,以多边形内部的一个点为扇心,就可以把多边形剖分成 N个三角形。



我们可以得到:A=sigma(Ai) ( i=1…N )

3 、既然内外都可以,为什么不设P0为坐标原点呢?
简化的公式:A=sigma([b]( Xi *Y(i+1)- X(i+1) *Yi ))/2( i=1…N )[/b]

hdu2036:改革春风吹满地

#include <stdio.h>
#define _DEBUG 0

int main(){
int n,i;
int f_x,f_y;//第1个点
int l_x,l_y;//上一个点
int cur_x,cur_y;//当前点
double area = 0;
#if _DEBUG == 1
freopen("2036.in","r",stdin);
#endif
while(scanf("%d",&n) && n != 0){
area = 0;//重置为0
for(i=0;i<n;++i){
scanf("%d %d",&cur_x,&cur_y);
if(i == 0){
f_x = cur_x;
f_y = cur_y;
}else{
area += (l_x * cur_y - cur_x * l_y);//计算当前点与上一个点以及0点组成的三角形面积
}
l_x = cur_x; l_y = cur_y;
}
area += (cur_x * f_y - f_x * cur_y);
printf("%.1f\n",area/2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: