当前位置: 首页 > news >正文

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

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

封装函数


point ##########::getCenterOfGravity(std::vector<point> polygon) {if (polygon.size() <= 2)return point();auto Area = [](point p0, point p1, point 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;};point p0 = polygon[0];point p1 = polygon[1];point p2;double sumarea = 0, sumx = 0, sumy = 0;for (int i = 2; i < polygon.size(); i++){p2 = polygon[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;//求总面积}point barycenter;barycenter.x = sumx / sumarea / 3;barycenter.y = sumy / sumarea / 3;return barycenter;
}

业务使用


std::vector<point> polygonDataList;for (int n = 0; n < data.size(); n++)
{point pointData;double lng = data.at(n).toArray().at(0).toDouble();double lat = data.at(n).toArray().at(1).toDouble();pointData.x = lng;pointData.y = lat;polygonDataList.push_back(pointData);lineString += QString::number(lng) + " " + QString::number(lat) + ",";
}QString strTmp = lineString.remove(lineString.size() - 1, 1);
lineStringData = "POLYGON ((" + strTmp + "))";qlistData.append(lineStringData);m_polygonDataArrayList.append(polygonDataList);

 定义

typedef struct point {double x = 0.;double y = 0.;
}point;/*** @breif  : 计算中心点函数* @param  : QList* @return : void* @date   : 2024/05/11 17:24*/point getCenterOfGravity(std::vector<point> polygon);// 中心坐标数据std::vector<point> m_polygonDataList;QList<std::vector<point>> m_polygonDataArrayList;

取中点测试 情况

        

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

 

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

参考网址

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

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

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

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

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PMON的解读和开发
  • java通过poi-tl导出word实战详细步骤
  • 视频使用操作说明书-T80005系列视频编码器如何对接海康NVR硬盘录像机,包括T80005系列高清HDMI编码器、4K超高清HDMI编码器
  • git diff,stash,submodule,format-patch
  • 自定义波形图View,LayoutInflater动态加载控件保存为本地图片
  • 上传图片,base64改为文件流,并转给后端
  • QT 图片处理
  • C#的DllImport使用方法
  • STM32智能空气质量监测系统教程
  • VUE与React的生命周期对比
  • 基于物联网的智慧校园建设与发展
  • 打造你的智能家居指挥中心:基于STM32的多协议(zigbee、http)网关(附代码示例)
  • 【MySQL】4.MySQL 的数据类型
  • jQuery 元素选择器集合
  • 数据结构第25节 深度优先搜索
  • centos安装java运行环境jdk+tomcat
  • JavaScript 一些 DOM 的知识点
  • javascript 总结(常用工具类的封装)
  • JavaScript异步流程控制的前世今生
  • Js基础知识(一) - 变量
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Vim 折腾记
  • 高程读书笔记 第六章 面向对象程序设计
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端攻城师
  • 什么是Javascript函数节流?
  • 使用Gradle第一次构建Java程序
  • 原生Ajax
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • AI算硅基生命吗,为什么?
  • PostgreSQL之连接数修改
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​卜东波研究员:高观点下的少儿计算思维
  • #14vue3生成表单并跳转到外部地址的方式
  • #pragma once
  • (2)STM32单片机上位机
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Python第六天)文件处理
  • (补)B+树一些思想
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (实战篇)如何缓存数据
  • (转)socket Aio demo
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转)项目管理杂谈-我所期望的新人
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .NET C# 操作Neo4j图数据库
  • .NET Core IdentityServer4实战-开篇介绍与规划