凸多边形的面积问题
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; }