凸多边形的面积问题

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;

}

 

你可能感兴趣的:(问题)