Лучшая структура данных для неизменной трехмерной сетки - PullRequest
8 голосов
/ 25 сентября 2011

Я экспериментирую с написанием игры в стиле функционального программирования, который подразумевает представление игрового состояния с помощью чисто функциональных неизменяемых структур данных.

Одной из наиболее важных структур данных будет трехмерная сеткапредставляющий мир, где объекты могут храниться в любом месте [x, y, z] сетки.Свойства, которые я хочу для этой структуры данных:

  • Неизменные
  • Быстрые постоянные обновления - то есть создание новой версииВся сетка с небольшими изменениями является дешевой и достигается за счет структурного разделения.Сетка может быть большой, поэтому копирование при записи не представляется возможным.
  • Эффективная обработка разреженных областей / одинаковых значений - пустые / незаселенные области не должны потреблять ресурсы (чтобы учестьбольшие открытые пространства).Бонусные баллы, если он также эффективен при хранении больших «блоков» одинаковых значений
  • Неограниченный - может расти в любом направлении по мере необходимости
  • Быстрое чтение / поиск - т.е. может быстро получить объект (ы) в [x, y, z]
  • Быстрый объем запросов , т.е. быстрый поиск в области [x1, y1, z1]-> [x2, y2, z2], в идеале использовать разреженность, чтобы пустые места быстро пропускались через

Какие-либо предложения по наилучшей структуре данных для использования?

PS Iзнаю, что это может быть не самый практический способ написания игры, я просто делаю это как учебный опыт и расширяю свои способности с помощью FP ......

1 Ответ

1 голос
/ 25 сентября 2011

Я бы попробовал октре.Граничные координаты каждого узла подразумеваются при размещении структуры, и каждый нетерминальный узел хранит 8 поддеревьев, но не содержит данных.Таким образом, вы можете «объединиться», чтобы получить место.

Я думаю, что Неизменные и Неограниченные (вообще) противоречивые требования.
В любом случае ... чтобы вырастить октре, вы должны заменить корень.

Другие требования, которые вы предъявляете, должны быть выполнены.

...