ssl1213-多邊形面積【差積,計算幾何】
阿新 • • 發佈:2019-01-05
正題
題目大意
求一個多邊形面積。
解題思路
隨便定一個原點,然後答案就是相鄰點的差積之和的絕對值。
要判斷不能組成多邊形的情況。
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 1010
#define db double
using namespace std;
db zx,zy,r,x[N],y[N];
int n,cnt,ans;
struct node{
db x,y;
}p[N];
db cz(node p2,node p3,node p1){
return (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y);
}
db banana(node p1,node p2,node p3,node p4) {
return (cz(p2,p3,p1)*cz(p2,p4,p1)<0&&cz(p4,p1,p3)*cz(p4,p2,p3)<0);
}
int main()
{
scanf("%d",&n);double ans=0,lx,ly;
if (n<=2)
{
printf("Impossible");
return 0;
}
for(int i=1;i<=n;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
for(int i=2;i<=n;i++ )
for(int j=1;j<n;j++)
if((i!=j)&&(i!=j+1)&&banana(p[i-1],p[i],p[j],p[j+1]))
{
printf("Impossible");
return 0;
}
for(int i=3;i<=n;i++)
ans+=cz(p[i],p[i-1],p[1])*0.5;
printf("%0.2lf",abs(ans));
}