Какую посоветуете структуру для хранения пространственных данных?

Доброго времени суток.
В рамках курсовой в университете разрабатываю простейшую онлайновую игру а-ля World of Tanks. Встал вопрос о хранении положения игроков в пространстве.
Подскажите, существует ли такие структуры данных, что:
1) Они хранят пространственные данные
2) Позволяют за приемлемое время обновлять данные (т.е. не удалять/добавлять новые значения, а именно обновлять те, что уже есть)
3) Определять коллизии между объектами, являющимися прямоугольниками и, в большинстве своём, повёрнутыми на какой-либо угол
Возможно поможет тот факт, что координаты объектов двумерные.

Если же таких структур нет, то я буду рад, если Вы поделитесь возможными решениями данной проблемы.
Спасибо.

UPD. Прошу меня извинить, но я забыл про ещё одно важное условие
4) Необходимо находить все объекты в некоторой заданной области.
  • Вопрос задан
  • 2739 просмотров
Решения вопроса 1
gbg
@gbg
Любые ответы на любые вопросы
BSP - дерево. Специально для вашей задачи. Кармак и Абраш одобряют.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Если речь о двумерке, то скорее всего это будут
Структура или тупля(в зависимости от языка)
Point{
abcissa Integer
ordinata Integer
}

Массив или лист(в зависимости от языка)
Contur[Point]
Структура или тупля(в зависимости от языка)
Object{
Position Point //Положение в абсолютных координатах
Contur [Point] //В координатах относительных к положению
Scale Integer //Коэффициент масштабирования
Turn Integer //Угол поворота
}

И как совершенно верно заметил @Армянское Радио - BSP дерево. В двумерке обычно применяют конкретно QuadTree, примерно такое
Quad{
Position Point
Size Point
Objects [Object] //Массив или лист объектов лежащих полностью в четверти Quad 
NordOst *Quad //Четыре дочерних четверти
NordWest *Quad //Это как правило рекурсивная структура
SudOst *Quad
SudWest *Quad
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы