Skip to content

Latest commit

 

History

History
25 lines (16 loc) · 1.79 KB

README.md

File metadata and controls

25 lines (16 loc) · 1.79 KB

nearest-neighbor

Canvas rendering of random dots connected to nearest neighbors

Поиск ближайших точек

Поиск ближайших точек в радиусе, не более, чем заданный.

Генерируется 200 случайных точек на плоскости, им задаётся случайное направление и скорость движения. Каждый кадр вычисляются новые положения точек и ищутся ближайшие к ним на расстоянии не более R. К обнаруженным ближайшим соседям рисуется ребро.

Зачем

Заинтересовал вопрос на Тостере.

Алгоритм

Сортируем массив точек по их X-координате. Двигаемся слева направо, выбирая очередную точку.

Смотрим от неё влево (чтобы не проверять одну связь дважды, выбираем полуплоскость от точки) и отбираем только те точки, чей X отличается не более, чем на radius.

Из них смотрим только на те, у которых Y не более, чем на radius отличается (уже в любую сторону: и вверх и вниз).

У них проверяем уже евклидово расстояние – корень из суммы квадратов расстояний по X и по Y – чтобы было не больше radius. У таких есть «связь» – рисуем им ребро.

Демо

Работающий fiddle.