题意:给定n个点,求n边形面积。
思路:用向量叉积来做。切割成n-2个三角形。
应该注意的地方。总面积应该是n-2个三角形有向面积(有正负)相加后,再取绝对值的一半。
为什么在poj上样例二输出1和2都过了呢- -#,可能是关于强制转换,好像不同的编译器,有不同的结果。
代码:
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
struct sa
{
double x;
double y;
}data[10005];
double cross(const sa &a,const sa &b)
{
return a.x*b.y-a.y*b.x;
}
int main()
{
int n;
double ans;
while(scanf("%d",&n)!=EOF)
{ ans=0;
if(n==0)
break;
for(int i=0;i<n;i++)
cin>>data[i].x>>data[i].y;
for(int i=1;i<=n;i++)
ans+=cross(data[i-1],data[i%n]);
printf("%d\n",(int)fabs(ans)/2);
}
return 0;
}