分析:给你一n边形,和n个顶点的坐标,让你求多边形的重心。思路就是将第一个点和其余点相连,这样就组成了n-2个三角形,然后求这n-2个三角形的重心,再按照质点组的重心求就可以了,公式是:其中A表示质点的坐标,m表示质点的重量,转化为多边形就是,这n-2个三角形的重心坐标,和n-2个三角形的面积,因为可能是凹多边形,这样凹进去的面积就是负的,质量也是负的,所以计算时不影响。
# include <stdio.h>
struct triangle
{
double x,y,s;
}T[1000000];
double x[1000000],y[1000000];
int main()
{
int i,n,t;
double ax,ay,s;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%lf%lf",&x[i],&y[i]);
for(i=2;i<n;i++)
{
T[i-1].x=(x[1]+x[i]+x[i+1]);
T[i-1].y=(y[1]+y[i]+y[i+1]);
T[i-1].s=((x[i]-x[1])*(y[i+1]-y[1])-(x[i+1]-x[1])*(y[i]-y[1]));
}
ax=ay=s=0;
for(i=1;i<n-1;i++)
{
ax+=T[i].s*T[i].x;
ay+=T[i].s*T[i].y;
s+=T[i].s;
}
ax/=3*s;ay/=3*s;
printf("%.2f %.2f\n",ax,ay);
}
return 0;
}