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博客

相关推荐
样例过了就是过了6 分钟前
LeetCode热题100 单词拆分
c++·算法·leetcode·动态规划·哈希算法
时空系19 分钟前
第7篇功能——打造你的工具箱 python中文编程
开发语言·python·ai编程
shughui19 分钟前
2026最新JDK版本选择及下载安装详细图文教程【windows、mac附安装包】
java·linux·开发语言·windows·jdk·mac
王老师青少年编程21 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【跳跃与过河问题】:跳跳!
c++·算法·贪心·csp·信奥赛·跳跃与过河问题·跳跳
王老师青少年编程23 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【跳跃与过河问题】:独木桥
c++·算法·贪心·csp·信奥赛·跳跃与过河问题·独木桥
AI玫瑰助手23 分钟前
Python基础:集合的定义、去重与交并差运算
开发语言·python·信息可视化
无敌秋25 分钟前
# C++ 工厂方法模式实战指南
开发语言·c++·设计模式
忡黑梨31 分钟前
eNSP_DHCP配置
c语言·网络·c++·python·算法·网络安全·智能路由器
skywalk81631 小时前
CodeArts碰到问题:CodeArts 智能体使用失败,显示:会话创建失败,请稍后重试
开发语言·python
白露与泡影1 小时前
从区间锁到行锁:一次高并发写入死锁治理实战
java·开发语言