标签:
开始想到用三边形法求面积
三角形海伦面积公式如下:
假设在平面内,有一个三角形,边长分别为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