当前位置:   article > 正文

c++ 多边形 xyz 数据 获取 中心点方法,线的中心点取中心值搞定 已解决

c++ 多边形 xyz 数据 获取 中心点方法,线的中心点取中心值搞定 已解决

        有需求需要对。多边形 获取中心点方法,绝大多数都是 puthon和java版本。立体几何学中的知识。

封装函数

  1. point ##########::getCenterOfGravity(std::vector<point> polygon) {
  2. if (polygon.size() <= 2)return point();
  3. auto Area = [](point p0, point p1, point p2) {
  4. double area = 0.;
  5. area = p0.x * p1.y + p1.x * p2.y +
  6. p2.x * p0.y - p1.x * p0.y -
  7. p2.x * p1.y - p0.x * p2.y;
  8. return area / 2;
  9. };
  10. point p0 = polygon[0];
  11. point p1 = polygon[1];
  12. point p2;
  13. double sumarea = 0, sumx = 0, sumy = 0;
  14. for (int i = 2; i < polygon.size(); i++)
  15. {
  16. p2 = polygon[i];
  17. double area = Area(p0, p1, p2);//求三角形的面积
  18. sumarea += area;
  19. sumx += (p0.x + p1.x + p2.x) * area; //求∑cx[i] * s[i]和∑cy[i] * s[i]
  20. sumy += (p0.y + p1.y + p2.y) * area;
  21. p1 = p2;//求总面积
  22. }
  23. point barycenter;
  24. barycenter.x = sumx / sumarea / 3;
  25. barycenter.y = sumy / sumarea / 3;
  26. return barycenter;
  27. }

业务使用

  1. std::vector<point> polygonDataList;
  2. for (int n = 0; n < data.size(); n++)
  3. {
  4. point pointData;
  5. double lng = data.at(n).toArray().at(0).toDouble();
  6. double lat = data.at(n).toArray().at(1).toDouble();
  7. pointData.x = lng;
  8. pointData.y = lat;
  9. polygonDataList.push_back(pointData);
  10. lineString += QString::number(lng) + " " + QString::number(lat) + ",";
  11. }
  12. QString strTmp = lineString.remove(lineString.size() - 1, 1);
  13. lineStringData = "POLYGON ((" + strTmp + "))";
  14. qlistData.append(lineStringData);
  15. m_polygonDataArrayList.append(polygonDataList);

 定义

  1. typedef struct point {
  2. double x = 0.;
  3. double y = 0.;
  4. }point;
  5. /**
  6. * @breif : 计算中心点函数
  7. * @param : QList
  8. * @return : void
  9. * @date : 2024/05/11 17:24
  10. */
  11. point getCenterOfGravity(std::vector<point> polygon);
  12. // 中心坐标数据
  13. std::vector<point> m_polygonDataList;
  14. QList<std::vector<point>> m_polygonDataArrayList;

取中点测试 情况

        

  1. // 方案一, 中心点 不准确
  2. //point data = getCenterOfGravity(pointData);
  3. // 方案二, 取数据的中心点
  4. int middleInt = (int)ceil(pointData.size() / 2);
  5. //qDebug() << "middleInt" << middleInt;
  6. point data = pointData.at(middleInt);
  7. polygonDataList.push_back(data);

 

        测试总结,其实  使用 数组取中间点,是面的中心点,如果是线的中心点,直接 数组的中间值,就是 线的中心点。

参考网址

        【C++】计算多边形的重心_求不规则区域中心点(重心)的c++算法-CSDN博客

        【中心】不规则多边形中心、形心、外接矩形中心计算方法_polygon 计算中心-CSDN博客

          JAVA代码计算多边形的几何中心点-阿里云开发者社区 

         in_polygon-阿里云帮助中心_(Open Search)-阿里云帮助中心

        查询地理多边形范围 - 表格存储 - 阿里云

        空间几何函数的基本语法 - 日志服务 - 阿里云

        polygon——关于多边形的重心_polygon重心-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/810698
推荐阅读
相关标签
  

闽ICP备14008679号