2013-03-27 5 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 или еще один способ для хэширования ваших местоположений для быстрого поиска.

Смежные вопросы