【问题标题】:Efficient getting a pair of coordinates with the shortest distance from array of coordinates using Javascript使用Javascript有效地获得与坐标数组距离最短的一对坐标
【发布时间】:2013-05-17 23:41:58
【问题描述】:

我有几个 x-y 坐标存储在两个数组中,一个用于源对象,一个用于目标:

var sourcePoints = [
  {
    x: 20,
    y: 11
  }, {
   ...
  }, {
    x: 10
    y: 6
  }
];

var targetPoints = [
  {
    x: 10,
    y: 71
  }, {
   ...
  }, {
    x: 22
    y: 8
  }
];

现在我只想从源数组中选择一些坐标,从目标数组中选择一些点(根据情况,某些组合没有任何意义)并计算它们之间的距离。

coordinatePairs = [
  {
    [1,4] : computeDistance(sourcePoints[1],targetPoints[4])
  },{
     ...
  }
];

现在我想知道如何以最短的距离有效地获取这些坐标。我需要将这些坐标对存储在一个数组中吗?

【问题讨论】:

  • 您的坐标对数据结构不合法。您不能将 [1,4] 作为对象的属性名称。
  • 不清楚您在问什么?你问如何计算两点之间的距离?或者,如何计算所有可能对之间的距离,然后只找到最近的 N 个点?

标签: javascript key coordinates distance


【解决方案1】:

如果你只对距离最短的两个点感兴趣,你可以使用这样的东西:

var minDist2 = Infinity;
var res = [];
for (var i = 0, max_i = sourcePoints.length; i < max_i; i++) {
    var sourcePoint = sourcePoints[i];
    for (var k = 0, max_k = targetPoints.length; k < max_k; k++) {
        var targetPoint = targetPoints[k];
        var dx = targetPoint.x - sourcePoint.x;
        var dy = targetPoint.y - sourcePoint.y;
        var dist2 = dx * dx + dy * dy;
        if (minDist2 > dist2) {
            minDist2 = dist2;
            res = [i, k];
        }
    }  
}

请注意,这不会计算点的实际距离,而是计算距离^2,因此您可以减少一次运算(平方根),这可能会加快速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多