基础的计算几何
多边形的n个顶点按*时针方向给出
由任意n边形可分解为n-2个三角形,各三角形面积面积与重心易得,故有各三角形的面积及重心
用重心公式可求得多边形的面积与重心
#include<bits/stdc++.h> using namespace std; const double eps=1e-9; const int N=10010; struct point { double x,y; point():x(0),y(0){} }p[N]; int main() { int T; scanf("%d",&T); while(T--) { int n; double area_sum=0; point ans; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y); for(int i=1;i<=n;i++) { double t=(p[i%n].x*p[i-1].y-p[i%n].y*p[i-1].x)/2.0; area_sum+=t; ans.x+=t*(p[i%n].x+p[i-1].x+0)/3.0; ans.y+=t*(p[i%n].y+p[i-1].y+0)/3.0; } if(fabs(area_sum)<eps) // 0不能做除数,所以要特判 puts("0.000 0.000"); else printf("%.3lf %.3lf\n", fabs(area_sum), (ans.x + ans.y) / area_sum); } }