#include <iostream>
#include <vector>
using namespace std;
/*
获取多边形重心
入参:std::vector<T_Point2D> point多边形轮廓点集
出参:重心点坐标(cogX, cogY)
*/
struct T_Point2D
{
double X, Y;
T_Point2D() { X = 0.0; Y = 0.0; }
T_Point2D(double _x, double _y) { X = _x; Y = _y; }
};
namespace MathFun {
double Area(T_Point2D p0, T_Point2D p1, T_Point2D p2)
{
double area = 0;
area = p0.X*p1.Y + p1.X*p2.Y + p2.X*p0.Y - p1.X*p0.Y - p2.X*p1.Y - p0.X*p2.Y;
return area / 2;
}
void GetCenterOfGravity(std::vector<T_Point2D> point, double &cogX, double &cogY)
{
T_Point2D p0 = point[0];
T_Point2D p1 = point[1];
T_Point2D p2;
double sumarea = 0, sumx = 0, sumy = 0;
for (int i = 2; i < point.size(); i++)
{
p2 = point[i];
double area = Area(p0, p1, p2);//求三角形的面积
sumarea += area;
sumx += (p0.X + p1.X + p2.X)*area; //求∑cx[i] * s[i]和∑cy[i] * s[i]
sumy += (p0.Y + p1.Y + p2.Y)*area;
p1 = p2;//求总面积
}
cogX = sumx / sumarea / 3;
cogY = sumy / sumarea / 3;
}
}