码迷,mamicode.com
首页 > 其他好文 > 详细

凸多边形的面积问题

时间:2015-02-03 13:07:37      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

Q:给定顶点坐标,求凸多边形的面积,保留两位小数。

样例输入:

4

3 3

3 0

1 2

1 0

样例输出

5.00

S:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double dist(struct point A,struct point B);
//该子函数用于求两点间的距离 
double square(double a,double b,double c);
//该子函数用于求任意三角形的面积 
struct point
//该结构体用于保存点的信息,包括横、纵坐标 
{
	double x,y;
};
int main()
{
	double a,b,c;//三角形的三条边 
	double temp;//三角形的面积 
	double S=0;//总面积 
	int i;
	int n;//表示要求的多边形为n边形	
	struct point *P;
	P=(point*)malloc(sizeof(point));
	scanf("%d",&n);
	for(i=0;i<n;i++)
	//输入多边形顶点坐标 
	{
		scanf("%lf%lf",&P[i].x,&P[i].y);
	}
	for(i=1;i<n-1;i++)
	//n边形可被分割为(n-2)个三角形 
	{
		if(i==1)//只需要单独求一次a,之后有:a’=c 
			a=dist(P[i],P[0]);
		b=dist(P[i],P[i+1]);
		c=dist(P[i+1],P[0]);
		temp=square(a,b,c);
		S+=temp;//累加总面积 
		a=c;//a’=c	
	}
	free(P);
	printf("%.2lf\n",S);//输出结果 
	return 0;
}
double dist(struct point A,struct point B)
{
	double s;
	//////////////////
	double a=A.x;
	double b=B.x;
	double c=A.y;
	double d=B.y;
	//////////////////这四行使代码简洁 
	s=sqrt((a-b)*(a-b)+(c-d)*(c-d));
	//两点间距离公式 
	return s;
}
double square(double a,double b,double c)
{
	double p;
	double S;
	////////////////////////////
	p=(a+b+c)/2;
	S=sqrt(p*(p-a)*(p-b)*(p-c));
	////////////////////////////海伦公式 
	return S;
}

 

凸多边形的面积问题

标签:

原文地址:http://www.cnblogs.com/LegendLa/p/4269660.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!