javascript - 我有一个用户输入坐标的列表,我如何计算尽可能接近所有坐标的点?
问题描述
我之前使用下面的代码来计算质心,但是当有很多点彼此靠近时,质心会被拉到那个方向,从而使从坐标到计算点的距离不太相等。如何计算与所有坐标的中点距离最短的坐标?
$.each( routeStart, function(i, routeCoords){
centroidx += parseFloat(routeCoords[0]);
centroidy += parseFloat(routeCoords[1]);
});
endpoint = ol.proj.fromLonLat([(centroidx / routeStart.length), (centroidy / routeStart.length)])
解决方案
您正在找到给定分数的平均值。相反,我认为您正在寻找的是所有绝对最大值和最小值的平均值。
例如:
var points = [
{ x: 6, y: 1},
{ x: 3, y: 4},
{ x: 7, y: 8},
{ x: -4, y:-10},
{ x: -5, y:-11},
{ x: -5, y:-10}
];
var maxX, minX, maxY, minY;
points.forEach(point => {
if(maxX === undefined || maxX < point.x) {
maxX = point.x
}
if(minX === undefined || minX > point.x) {
minX = point.x
}
if(maxY === undefined || maxY < point.y) {
maxY = point.y
}
if(minY === undefined || minY > point.y) {
minY = point.y
}
});
var centerPoint = {
x: ((maxX + minX) / 2),
y: ((maxY + minY) / 2)
};
console.log("Center point: ", centerPoint);
要对此进行测试,您可以运行上面的代码,然后将以下内容添加到点列表中。这不应该改变中心点。
{ x: -5, y:-10},
{ x: -5, y:-10},
{ x: -5, y:-10},
推荐阅读
- json - 如何将动态json键映射到java中的post请求对象
- node.js - FB Messenger Bot:messaging_events.length --> 无法读取属性长度
- java - 为 Ignite Compute Grid 设置 RAM 大小
- c# - C# 使用 ManualResetEvent 启动停止线程
- c# - 动作结果
> 必须返回一个列表 - php - 如何检查是否在php用户空间中使用了return_value(来自php函数,在本机扩展内)?
- google-apps-script - App Script中doc/docx的访问dom
- php - 在 Shopware 中创建主题期间,我在 Theme.php 中做错了什么配置主题按钮被禁用?
- javascript - .find() 在 DOMNodeInserted 上无法按预期工作
- c - TunTap 设备接收 ping