2013-03-27 59 views
4

我正在嘗試在SVG繪圖上的所有元素中找到最接近給定元素的歐幾里得距離。如何找到SVG中最接近的元素?

現在,我不挑剔如何測量距離 - 無論是邊界框,質心還是其他任何東西。

這是一種方式,除了計算每對元素之間的距離,然後排序?

回答

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; 
} 

如果你這樣做是經常如果你已經測試過簡單的解決方案上面,以證明它是太慢,然後查看space partitioning或其他方法來散列您的位置以便快速查找。