Структура данных (или алгоритм) для быстрого поиска объектов на основе расстояния

8

Например, в вашей игре бегают 100 врагов (в разных командах), и их ИИ хочет осмотреть ближайшие объекты, чтобы определить, на кого он должен атаковать. Как быстро организовать эти объекты так, чтобы каждому врагу не приходилось рассчитывать расстояние между собой и всеми другими объектами?

Короче говоря, как быстро ИИ-сущность может ответить на вопрос "Кто рядом со мной?"

khayman218
источник
попробуйте использовать четырехъядерные деревья
Ali1S232

Ответы:

8

Вам нужен пространственный индекс, такой как квадри (2D) или октодерево (3D).

Будет
источник
1
@FxIII Я не уверен, что слежу за тем, о чем ты. Эти пространственные древовидные структуры специально разработаны для ответа на вопрос автора и хорошо поняты и используются.
Уилл
5

Самое простое решение - это сетка . Положите 2D сетку над своим уровнем. Каждая ячейка в сетке содержит коллекцию объектов, которые в настоящее время занимают ее. Когда сущности перемещаются, вытащите их из клетки, из которой они выходят, и добавьте их к той, в которую они входят.

Затем вы можете найти близлежащие объекты, просто осмотрев соседние ячейки. Квадродерево уточняет это путем рекурсивного деления сетки, но иногда достаточно плоского, особенно если размер вашего уровня фиксирован и относительно мал.

необычайно щедрый
источник