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


8

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

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


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

Ответы:


8

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


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

5

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.