poj3855Blast the Enemy!(多边形重心)

链接

 1 #include <iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 #include<algorithm>

 5 #include<stdlib.h>

 6 #include<vector>

 7 #include<cmath>

 8 #include<queue>

 9 #include<set>

10 using namespace std;

11 #define N 100000

12 #define LL long long

13 #define INF 0xfffffff

14 const double eps = 1e-8;

15 const double pi = acos(-1.0);

16 const double inf = ~0u>>2;

17 struct point

18 {

19     double x,y;

20     point(double x=0,double y = 0):x(x),y(y){}

21 }p[N];

22 typedef point pointt;

23 point operator -(point a,point b)

24 {

25     return point(a.x-b.x,a.y-b.y);

26 }

27 double cross(point a,point b)

28 {

29     return a.x*b.y-a.y*b.x;

30 }

31 int main()

32 {

33     int i,j,n;

34     int kk = 0;

35     while(scanf("%d",&n)&&n)

36     {

37         for(i = 0 ;  i< n; i++)

38         scanf("%lf%lf",&p[i].x,&p[i].y);

39         p[n] = p[0];

40         double sx = 0,sy = 0,sum =0 ;

41         for(i = 1; i < n-1 ;i++)

42         {

43             double ts = cross(p[i]-p[0],p[i+1]-p[0])/2;

44             double x = p[0].x+p[i].x+p[i+1].x;

45             double y = p[0].y+p[i].y+p[i+1].y;

46             sum+=ts;

47             sx+=x*ts;

48             sy+=y*ts;

49         }

50         printf("Stage #%d: %.6f %.6f\n",++kk,sx/3.0/sum,sy/3.0/sum);

51     }

52     return 0;

53 }
View Code

 

你可能感兴趣的:(poj)