0

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

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])
  },{
     ...
  }
];

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

4

1 回答 1

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,因此您可以减少一次运算(平方根),这可能会加快速度。

于 2013-05-17T15:41:58.933 回答