1. 程式人生 > >ssl1213-多邊形面積【差積,計算幾何】

ssl1213-多邊形面積【差積,計算幾何】

正題


題目大意

求一個多邊形面積。


解題思路

隨便定一個原點,然後答案就是相鄰點的差積之和的絕對值。
要判斷不能組成多邊形的情況。


c o d e code

#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)); }