4

我试图在 SVG 绘图上的所有元素中找到最接近给定元素的欧几里得距离。

目前,我对如何测量距离并不挑剔——无论是在边界框、质心或其他任何东西之间。

除了计算每对元素之间的距离然后排序之外,还有其他方法吗?

4

1 回答 1

1

你不需要计算每对元素之间的距离,也不需要排序。您只需要遍历所有元素并跟踪最小距离/元素对:

function closest( elements, toElement ){
  var closestDistance=Infinity, closestElement;
  for (var i=elements.length;i--;){
    var fromElement = elements[i];
    if (fromElement==toElement) continue;
    var distance = distanceBetween(toElement,fromElement);
    if (distance<closestDistance){
      closestElement  = fromElement;
      closestDistance = distance;
    }
  }
  return closestElement;
}

如果您经常这样做,并且您已经测试了上面的简单解决方案以证明它太慢,那么请查看空间分区或其他方法来散列您的位置以便更快地查找。

于 2013-03-27T15:10:29.980 回答