不可变持久3D网格的最佳数据结构

时间:2011-09-25 05:18:51

标签: language-agnostic data-structures functional-programming

我正在尝试用函数编程风格编写游戏,这意味着用纯粹的功能性,不可变数据结构来表示游戏状态。

最重要的数据结构之一是表示世界的3D网格,其中对象可以存储在任何[x,y,z]网格位置。我想要这个数据结构的属性是:

  • 不可变
  • 快速持续更新 - 即通过小的变化创建整个网格的新版本是便宜的并且通过结构共享来实现。网格可能很大,因此写时复制不是一个可行的选择。
  • 稀疏区域/相同值的有效处理 - 空/未填充区域应该不消耗资源(允许大的开放空间)。如果它在存储相同值的大“块”方面也很有效,则可以获得奖励
  • 无界 - 可以根据需要向任何方向增长
  • 快速读取/查找 - 即可以快速检索[x,y,z]处的对象
  • 快速查询,即快速搜索区域[x1,y1,z1] - > [x2,y2,z2],理想情况下利用稀疏性,以便快速跳过空格

有关用于此目的的最佳数据结构的任何建议吗?

P.S。我知道这可能不是编写游戏的最实用的方式,我只是把它作为一种学习经验并用FP来扩展我的能力......

1 个答案:

答案 0 :(得分:1)

我会尝试一个octtree。每个节点的边界坐标隐含在结构放置中,每个非终结节点保留8个子树但没有数据。因此,您可以“联合”以获得空间。

我认为不可变无界(通常)是相互冲突的要求。
无论如何......要发展一个octtree你必须更换根。

应该满足您提出的其他要求。