HDUoj_1115 求多边形重心

来源:互联网 发布:宁波易企网络 编辑:程序博客网 时间:2024/06/08 17:20
题解:多边形n个定点,分割成n-2个三角形,给每个三角形求出重心,因为每个三角形的面积不相同,所以重心的质量不一样,问题转换为求n-2个质量不均匀的点的重心。
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>using namespace std;const int maxn = 1e6+5;struct Node{double x,y;}arr[maxn];double AREA(const Node &p0,const Node &p1,const Node &p2){return p0.x*p1.y+p1.x*p2.y+p2.x*p0.y-p0.x*p2.y-p1.x*p0.y-p2.x*p1.y;}int main(){int T;scanf("%d",&T);int n;Node p0,p1,p2;double areasum;double x,y;while(T--){scanf("%d",&n);scanf("%lf%lf",&p0.x,&p0.y);scanf("%lf%lf",&p1.x,&p1.y);areasum = 0,x=0,y=0;for(int i = 2; i < n; i++){scanf("%lf%lf",&p2.x,&p2.y);double area = AREA(p0,p1,p2);areasum += area;x += ((p0.x+p1.x+p2.x)*area);y += ((p0.y+p1.y+p2.y)*area);p1=p2;}printf("%.2lf %.2lf\n",x/3/areasum,y/3/areasum);}return 0;} 


原创粉丝点击