以下两种方法求多边形面积:
一:
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn=105;
int n;
struct node
{
double x;
double y;
}p[maxn];
double area(node p[],int n)
{
double ans=0;
int i;
for(i=1; i<=n; i++)
{
ans+=p[i-1].x*p[i%n].y-p[i-1].y*p[i%n].x;
}
return fabs(ans/2.0);
}
int main()
{
int i;
while(~scanf("%d",&n),n)
{
for(i=0; i<n; i++)
{
cin>>p[i].x>>p[i].y;
}
double sum;
sum=area(p,n);
printf("%.1lf\n",sum);
}
return 0;
}
二:
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
int n;
struct node
{
double x;
double y;
};
double area(node p1,node p2,node p3)
{
double ans;
ans=p1.x*p2.y+p2.x*p3.y+p3.x*p1.y-p2.x*p1.y-p3.x*p2.y-p1.x*p3.y;
return ans/2.0;
}
int main()
{
node p1,p2,p3;
int i;
double sum;
while(scanf("%d",&n),n)
{
sum=0;
scanf("%lf%lf",&p1.x,&p1.y);
scanf("%lf%lf",&p2.x,&p2.y);
for(i=3; i<=n; i++)
{
scanf("%lf%lf",&p3.x,&p3.y);
sum+=area(p1,p2,p3);
p2=p3;
}
printf("%.1lf\n",sum);
}
return 0;
}