题目:
求多边形面积
题解:
任选一个点连所有多边形的点,顺着转一圈的叉乘
额,别忘了
/
2
/2
/2 还有方向不明->
f
a
b
s
(
)
fabs()
fabs()
#include<cstdio>
#include<cmath>
#include<string.h>
#include<iostream>
using namespace std;
const int N=1e5+10;
const double eps=1e-5;
struct nd{
double x,y;
friend nd operator*(const nd &a,const double b)
{
nd ans={a.x*b,a.y*b};return ans;
}
friend nd operator/(const nd &a,const double b){
nd ans={a.x/b,a.y/b};return ans;
}
friend nd operator+(const nd &a,const nd &b){
nd ans={a.x+b.x,a.y+b.y};return ans;
}
friend double operator*(const nd &a,const nd &b){
return (a.x*b.y-b.x*a.y);
}//X
};
nd get(nd a,nd b){nd ans={b.x-a.x,b.y-a.y};return ans;}
void cet(nd &a){scanf("%lf%lf",&a.x,&a.y);}
void pr(nd a){printf("%.2lf %.2lf",a.x,a.y);}
nd cross(nd a1,nd a2,nd b1,nd b2){
double s1=get(a1,b1)*get(a1,b2)/2;
double s2=get(a2,b2)*get(a2,b1)/2;
return a1+((get(a1,a2)*s1)/(s1+s2));
}
nd a[N];
nd a1,a2,b1,b2;
int main()
{
int n;
while(~scanf("%d",&n))
{
if(!n)break;
for(int i=1;i<=n;i++)cet(a[i]);
double ans=0;
for(int i=3;i<=n;i++)
{
ans+=get(a[1],a[i-1])*get(a[1],a[i]);
//printf("%d(%.0lf)\n",i,ans);
}
printf("%.0lf\n",fabs(ans/2));
}
}