#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;}
}
本文发布于:2024-02-05 02:51:35,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170722303862341.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |