题目大意:给定n个点的坐标,求n边形的重心
解题思路:选定任意一点作为定点(坐标原点)为每个三角形的一个顶点,将n边形分成n个三角形,n边形的重心=(每个三角形的重心*每个三角形的面积)/面积和
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <list>
#include <set>
using namespace std;
const int maxn = 1e6+100;
struct Point
{
double x;
double y;
}p[maxn],gra;
int main()
{
int n,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i = 0; i < n; i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
double area = 0.;
gra.x = gra.y = 0.;
p[n] = p[0];
for(int i = 0; i < n; i++)
{
area += (p[i].x*p[i+1].y-p[i].y*p[i+1].x);
gra.x += (p[i].x*p[i+1].y-p[i].y*p[i+1].x)*(p[i].x+p[i+1].x);
gra.y += (p[i].x*p[i+1].y-p[i].y*p[i+1].x)*(p[i].y+p[i+1].y);
}
gra.x /= 3*area;
gra.y /= 3*area;
printf("%.2lf %.2lf\n",gra.x,gra.y);
}
return 0;
}