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;
    }
    
  • 相关阅读:
    社群电商
    文字超出部分省略号显示······
    jq监听页面的滚动事件,
    input 更改 pleaseholder 的字体样式
    20161213 scrapy安装
    map按照value排序的方法
    Qt跨线程信号和槽的连接
    C++ map指针的使用
    Python 高级进阶
    [转]解读C指针(5)——笔试题解析
  • 原文地址:https://www.cnblogs.com/LegendLa/p/4269660.html
Copyright © 2011-2022 走看看