计算多边形面积

计算多边形面积

三角形的面积

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(( Xi *Y(i+1)-  X(i+1) *Yi ))/2( i=1…N
 

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;
}


 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值