@dyrtage

Как найти ближайшие точки на координатной плоскости?

Есть координатная плоскость 10 на 10. На ней расположены рандомным образом точки. Их координаты могут быть: (1, 3); (4, 2) и т.п. Допустим есть точка с координатами (4, 5). Как найти ближайшее к нему 3 точки?
  • Вопрос задан
  • 444 просмотра
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Координаты строго целочисленные?
Тогда обходи точки с помощью алгоритма floodfill, с центром в исходной точке.
Например, для небольшого участка порядок будет таким:
5 4 3 4 5
4 2 1 2 4
3 1 X 1 3
4 2 1 2 4
5 4 3 4 5

Цифра - на какой итерации проверяются эти позиции.
Т.е. сначала проверяешь соседние с исходной, потом соседние с ними, потом соседние с теми, и так далее.
Если в позиции есть точка, добавляешь её в список найденных. Когда в списке найденных набралось 3 точки, останавливаешься.
Ответ написан
@dmshar
Не понимаю, зачем обходить точки для решения задачи?
Предположим, у вас поле не 10х10, а 100х100. А точек - 5. Вопрос: Сколько клеток вам надо обойти, что-бы найти оптимальную точку? Правильный ответ - 100х100-1.
А теперь вспоминаем школьную математику. Расстояние между двумя точками "a" и "b" в двумерном пространстве определяется как sqrt(Xa-Xb)**2 +(Ya-Yb)**2).
Все. Есть пять точек. Для каждой из них вычисляем расстояние до нашей точки и отбираем три (или сколько надо) для которых эти расстояния наименьшие.
Даже на небольшой доске 10х10 и - предположим - 10 точках выигрыш прямого решения против последовательного обхода всех 99 точек очевиден.
P.S. Ни к Python, ни к JavaScript эта задача не имеет отношения от слова совсем.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы