POJ1385 计算多边形的重心

时间:2024-07-24 19:03:32
point gravity_center(point* p,int n)
{
   double area=0.0;
   point ZERO;
   ZERO.x = 0;
   ZERO.y = 0;
   point ret = ZERO;
   p[n]=p[0];
   for (int i=0; i<n; ++i)
  {
   ret.x+=cross(p[i],p[i+1],ZERO)*(p[i].x+p[i+1].x);
   ret.y+=cross(p[i],p[i+1],ZERO)*(p[i].y+p[i+1].y);
   area+=cross(p[i],p[i+1],ZERO);
  }
   ret.x/=3.0*area,ret.y/=3.0*area;
   return ret;
上面的函数中cross指的是叉积。
找一个基准点,轮流一圈即可