Я делаю простую игру и наткнулся на эту проблему. Предположим, что в 2D-пространстве несколько точек. Я хочу, чтобы точки, близкие друг к другу, каким-то образом взаимодействовали.Поиск всех точек в определенном радиусе другой точки
Позвольте мне бросить картину здесь для лучшего понимания проблемы:
Теперь проблема не о вычислении расстояния. Я знаю, как это сделать.
Сначала у меня было около 10 баллов, и я мог просто проверить каждую комбинацию, но, как вы уже можете предположить, это крайне неэффективно с увеличением количества очков. Что, если бы у меня было всего миллион очков, но все они были бы очень далеки друг от друга?
Я пытаюсь найти подходящую структуру данных или способ взглянуть на эту проблему, поэтому каждая точка может учитывать только их окружающее и не все пространство. Существуют ли для этого известные алгоритмы? Я точно не знаю, как назвать эту проблему, чтобы я мог Google точно, что хочу.
Если вы не знаете такого известного алгорима, все идеи приветствуются.
Я не знаю, если это лучшая идея, но это лучше, чем ничего. Сохраните свое 2D-пространство в этой структуре: array (array (bool)), true, если есть точка, false, если нет. Поэтому, когда вы хотите найти точки в радиусе, вам не нужно оценивать всю матрицу, только позиции, находящиеся внутри радиуса –
https://en.wikipedia.org/wiki/K-d_tree – amit
@pablito. aven Это была одна из моих первых идей. Все еще не очень нравится идея проверки каждого пикселя вокруг вас. – Saraph