码迷,mamicode.com
首页 > 其他好文 > 详细

求多边形面积

时间:2015-05-13 00:26:27      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

杭电2036

技术分享

 

开始想到用三边形法求面积

三角形海伦面积公式如下:

假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:  

S=sqrt(p(p-a)(p-b)(p-c))

公式中的p为半周长: p=(a+b+c)/2 

#include <stdio.h>
#include <math.h>
double c(double i,double j,double x,double y,double m,double n)
{
double s,p,a,b,c;
a=sqrt((x-i)*(x-i)+(y-j)*(y-j));
b=sqrt((m-x)*(m-x)+(n-y)*(n-y));
c=sqrt((m-i)*(m-i)+(n-j)*(n-j));
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
int main()
{
        int i,n;
        double a[10024],sum;
          while(scanf("%d",&n)!=EOF)
               {
                     sum=0;
                     if(n==0) break;
                      for(i=0;i<2*n;i++)
                             {
                                     scanf("%lf",&a[i]);
                                 }
                     for(i=2;i<2*n-4;i=i+2)
                           {
                                   sum+=c(a[0],a[1],a[i],a[i+1],a[i+2],a[i+4]);
                             }
                  printf("%.1lf\n",sum);
                 }
           return 0;
}

然后肯定不能AC了,第一太复杂了,还有就是多边形要是是那种凹凸边形,这方法根本行不通;

还有一个方法,有个公式

已知各点坐标,按顺时针或逆时针(X1,Y1),(X2,Y2)........(Xn,Yn);

S=1/2[(X1*Y2-X2*Y1)+(X2*Y3-Y2*X3)..............+(Xn*Y1-X1*Yn)];

#include <stdio.h>
int main()
{
          int i,n;
          double a[1024],b[1024],sum;
             while(scanf("%d",&n)!=EOF)
               {
                   if(n==0) break;
                     sum=0;
                  for(i=0;i<n;i++)
                    {
                           scanf("%lf %lf",&a[i],&b[i]);
                       }
                 for(i=0;i<n-1;i++)
                  {
                       sum=sum+(a[i]*b[i+1]-a[i+1]*b[i]);
                  }
                 sum=sum+(a[n-1]*b[0]-a[0]*b[n-1]);
                    printf("%.1lf\n",sum/2);
              }
return 0;
}

求多边形面积

标签:

原文地址:http://www.cnblogs.com/liuming1115/p/4498811.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!