我有两个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])
},{
...
}
];
现在我想知道如何以最短的距离有效地获得那些坐标。我是否需要将这些坐标对存储在数组中?
答案 0 :(得分:0)
如果您只对距离最短的两个点感兴趣,可以使用以下内容:
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,因此您可以减少一个操作(平方根),这可能会加快一些速度。