题目描述:
已经顺序给出多边形的各个顶点,求重心
struct point{
int x, y;
};
point p[1000001];
double cal(int i, int j)
{
double res;
res = p[i].x*p[j].y - p[j].x*p[i].y;
return res;
}
int main()
{
int T, N;
double cx, cy;
scanf("%d", &T);
for (int t = 0; t < T; t++)
{
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d %d", &p[i].x, &p[i].y);
p[N].x = p[0].x;
p[N].y = p[0].y;
double A = 0;
for (i = 0; i < N; i++)
{
A += cal(i, i+1);
}
A /= 2;
cx = cy = 0;
for (i = 0; i < N; i++)
{
cx += (p[i].x + p[i+1].x)*cal(i, i+1);
cy += (p[i].y + p[i+1].y)*cal(i, i+1);
}
cx /= 6*A;
cy /= 6*A;
printf("%.2lf %.2lf/n", cx, cy);
}
return 0;
}