首页 > 代码库 > 凸多边形的面积问题
凸多边形的面积问题
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;}
凸多边形的面积问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。