求多边形的重心。
#include<stdio.h>
struct POINT
{
double x,y;
}point[1000002];
POINT bcenter(POINT pnt[], int n){
POINT p, s;
double tp, area = 0, tpx = 0, tpy = 0;
p.x = pnt[0].x; p.y = pnt[0].y;
for (int i = 1; i <= n; ++i) { // point: 0 ~ n-1
s.x = pnt[(i==n) ? 0 : i].x;
s.y = pnt[(i == n) ? 0 : i].y;
tp = (p.x * s.y - s.x * p.y);
area += tp / 2;
tpx += (p.x + s.x) * tp;
tpy += (p.y + s.y) * tp;
p.x = s.x; p.y = s.y;
}
s.x = tpx / (6 * area); s.y = tpy / (6 * area);
return s;
}
int main()
{
int t,n,i;
POINT center;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf%lf",&point[i].x,&point[i].y);
center=bcenter(point,n);
printf("%.2lf %.2lf\n",center.x,center.y);
}
return 0;
}