#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define N 1000005
struct point
{
double x,y;
}p[N];
int T,n;
double cal(point a,point b)
{
return (a.x-p[0].x)*(b.y-p[0].y)-(a.y-p[0].y)*(b.x-p[0].x);
}
//叉積計算三角形面積
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int i,j,k;
for(i=0;i
scanf("%lf%lf",&p[i].x,&p[i].y);
double S=0,x=0,y=0;
for(i=1;i
{
double tmp=cal(p[i],p[i+1]);
S+=tmp;
x+=(p[i].x+p[i+1].x+p[0].x)/3*tmp;
y+=(p[i].y+p[i+1].y+p[0].y)/3*tmp;
/*把每個三角形看作一個品質為面積的點,然後求出這個三角形X坐标平均值,相乘後得到這個點将所有點同樣處理後相加,最終結果除以多邊形面積就是多邊形重心的X坐标。Y坐标同理。*/
}
printf("%.2lf %.2lf\n",x/S,y/S);
}
return 0;
}
計算幾何參考了 http://www.cnblogs.com/cpoint/archive/2011/06/09/2076405.html
題意求多邊形重心