实现思路非常简单和直观,本方法针对与二维平面上的凸多边形。多边形顶点坐标数据结构咱就以opencv举例
现有一组凸多边形二维平面坐标数组//base on opencv
std::vector<:point2f> polygonstep1 计算凸多边形的质心
计算质心的方法非常简单,就是分区计算x、y坐标的平均值cv::Point2f centroid = {0.0f, 0.0f};
for(const auto& pt: polygon)
{
centroid.x += pt.x;
centroid.y += pt.y;
}
auto count = polygon.size();
centroid.x = centroid.x / count;
centroid.y = centroid.y / count;step2: 将质心作为坐标系原点建立坐标系
以质心坐标作为参考基准,多边形顶点减去质心坐标,就可以将多边形转换为以质心作为原点的坐标表示for(auto& pt: polygon)
{
auto offset_pt = pt - centroid;
//...下一步处理
}step3: 计算每个顶点与质心连线的角度,并基于角度排序
到这一步就很直观了,质心在凸多边形内