求多边形面积

杭电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 ",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 ",sum/2);
              }
return 0;
}

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