zoukankan      html  css  js  c++  java
  • 凸多边形的面积问题

    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
    ",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;
    }
    
  • 相关阅读:
    Daily Scrum02 12.05
    Daily Scrum02 12.04
    用户调研报告
    Daily Scrum02 12.03
    Daily Scrum02 12.02
    Daily Scrum02 12.01
    Daily Scrum02 11.30
    软件工程项目组Z.XML会议记录 2013/11/27
    Daily Scrum02 11.29
    201509-3 模板生成系统
  • 原文地址:https://www.cnblogs.com/LegendLa/p/4269660.html
Copyright © 2011-2022 走看看