计算矢量图像的形心
struct point
{
double x;
double y;
};
point ring_to_center(std::vector<point> ring)
{
double sumX = 0;
double sumY = 0;
double area = 0;
for (size_t i = 0; i < ring.size(); i++)
{
point currentPoint = ring[i];
point nextPoint = ring[(i + 1) % ring.size()];
double product = (currentPoint.x * nextPoint.y) - (nextPoint.x * currentPoint.y);
area += product;
sumX += (currentPoint.x + nextPoint.x) * product;
sumY += (currentPoint.y + nextPoint.y) * product;
}
area /= 2;
area < 0 ? -area : area;
double denominator = 1 / (6 * area);
double center_x = sumX * denominator;
double center_y = sumY * denominator;
point center_point;
center_point.x = center_x;
center_point.y = center_y;
return center_point;
}