Существует множество игр, которые обычно можно рассматривать как набор объектов, разбросанных по пространству, и очень распространенной операцией является выбор всех объектов в подобласти. Типичным примером будет игра с тоннами юнитов на большой карте и взрыв, который воздействует на юнитов определенного радиуса. Это требует выбора каждой единицы в радиусе, чтобы применить эффекты взрыва.
Теперь есть несколько способов хранения объектов, которые позволяют эффективно выбирать подобласть. Самый простой способ - это, вероятно, разделить карту на сетку; выбор единиц в области будет включать в себя выбор только тех частей сетки, которые затронуты, и выполнение мелкозернистых плиток сетки координат, которые не находятся на 100% внутри области.
Что мне не нравится в этом подходе, так это ответ "Насколько большими должны быть плитки сетки?" Слишком большой, и эффективность может стать реальной проблемой. Слишком маленький, и сетка занимает тонны памяти, если игровой мир достаточно велик (и может стать нелепым, если игра 3D). Может даже не быть подходящей золотой середины.
Очевидное решение вышеизложенного состоит в том, чтобы создать большую сетку с неким интеллектуальным подразделением, таким как псевдо-древовидная структура. И именно в этот момент я точно знаю, что я далеко в преждевременной оптимизации. (Тогда есть правильные динамические квадраты / октре, но это еще сложнее для кода, и я даже не уверен, что он будет работать лучше.)
Итак, мой вопрос : существует ли стандартное решение для вышеуказанной проблемы? Что-то в строках контейнера STL, которое может просто хранить любой объект с координатой и получать список объектов в определенной области? Это не должно отличаться от того, что я описал выше, если это что-то, что было продумано и признано «достаточно хорошим» для начала.
Бонусные баллы, если в Python есть реализация алгоритма, но C тоже подойдет.