我试图在 SVG 绘图上的所有元素中找到最接近给定元素的欧几里得距离。
目前,我对如何测量距离并不挑剔——无论是在边界框、质心或其他任何东西之间。
除了计算每对元素之间的距离然后排序之外,还有其他方法吗?
我试图在 SVG 绘图上的所有元素中找到最接近给定元素的欧几里得距离。
目前,我对如何测量距离并不挑剔——无论是在边界框、质心或其他任何东西之间。
除了计算每对元素之间的距离然后排序之外,还有其他方法吗?
你不需要计算每对元素之间的距离,也不需要排序。您只需要遍历所有元素并跟踪最小距离/元素对:
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;
}
如果您经常这样做,并且您已经测试了上面的简单解决方案以证明它太慢,那么请查看空间分区或其他方法来散列您的位置以便更快地查找。