题目大意:输入一个n边形的n个点的坐标,要求你求出这个多边形的重心
代码如下:
#include<iostream>
#include<stdlib.h>
using namespace std;
const int maxn=1000005;
typedef struct point
{
double x;
double y;
point(double a=0,double b=0):x(a),y(b){}
double operator *(point b)
{
return x*b.y-y*b.x;//表示这两个点的叉乘,即这两个点与原点所围成的三角形的面积的两倍,由于采用叉乘的方式,所以有可能为负,所以可将该多边形的外面部分的面积减去
}
}P;
int n;
P p[maxn];
double cen_x,cen_y;
void centerGra()
{
double area=0;
for(int i=0;i<n;i++)
{
int j=(i+1)%n;
area+=p[i]*p[j];//计算多边形的面积,质量分布均匀,则可将其面积看作质量
cen_x+=(p[i].x+p[j].x)*(p[i]*p[j]);//计算多边形重心的横坐标
cen_y+=(p[i].y+p[j].y)*(p[i]*p[j]);//计算多边形重心的纵坐标
}
area/=2.0;
cen_x=cen_x/(6.0*area);
cen_y=cen_y/(6.0*area);
}
int main(void)
{
int cas,i;
cin>>cas;
while(cas--)
{
cen_x=cen_y=0;
cin>>n;
for(i=0;i<n;i++)
cin>>p[i].x>>p[i].y;
centerGra();
printf("%.2lf %.2lf\n",cen_x,cen_y);
}
system("Pause");
return 0;
}