首页 > 代码库 > 凸多边形的面积问题

凸多边形的面积问题

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

 

凸多边形的面积问题