Canvas rendering of random dots connected to nearest neighbors
Поиск ближайших точек в радиусе, не более, чем заданный.
Генерируется 200 случайных точек на плоскости, им задаётся случайное направление и скорость движения. Каждый кадр вычисляются новые положения точек и ищутся ближайшие к ним на расстоянии не более R. К обнаруженным ближайшим соседям рисуется ребро.
Заинтересовал вопрос на Тостере.
Сортируем массив точек по их X-координате. Двигаемся слева направо, выбирая очередную точку.
Смотрим от неё влево (чтобы не проверять одну связь дважды, выбираем полуплоскость от точки) и отбираем только те точки, чей X отличается не более, чем на radius.
Из них смотрим только на те, у которых Y не более, чем на radius отличается (уже в любую сторону: и вверх и вниз).
У них проверяем уже евклидово расстояние – корень из суммы квадратов расстояний по X и по Y – чтобы было не больше radius. У таких есть «связь» – рисуем им ребро.
Работающий fiddle.