【发布时间】:2014-02-03 01:16:03
【问题描述】:
我有一个八叉树,用于存储基于体素的流体。当我模拟流体时,我需要访问当前节点周围的叶子,我该如何实现这样的搜索?
您可以假设节点存储了一个指向其父节点的指针。(也许还需要其他数据?)
【问题讨论】:
标签: data-structures language-agnostic octree
我有一个八叉树,用于存储基于体素的流体。当我模拟流体时,我需要访问当前节点周围的叶子,我该如何实现这样的搜索?
您可以假设节点存储了一个指向其父节点的指针。(也许还需要其他数据?)
【问题讨论】:
标签: data-structures language-agnostic octree
假设每个八叉树节点还在八叉树中保存其 3D 索引[1](及其深度)。
如果当前节点只有更高深度的邻居(八叉树不完整/完美),则在 2. 中完成的遍历将停止在八叉树中小于或等于深度的最大可达深度查询节点。
如果节点持有指向其父节点的指针,则 2. 可以通过首先找到当前节点及其每个邻居的最低共同祖先来改进(这是通过在其 3D 索引中找到最长的公共二进制前缀来完成的)并开始遍历,只从这个祖先节点到达邻居。
[1]:3D 索引就是八叉树中节点的 x/y/z 坐标。例如,根的八个子节点具有 1 个二进制数字的 3D 索引(这些节点位于八叉树中的深度 1):0/0/0、1/0/0、0/1/0、1/1 /0, ... 根的 64 个孙子具有 2 个二进制数字的 3D 索引(这些节点位于八叉树的深度 2):00/00/00、01/00/00、10/ 00/00、11/00/00、00/01/00、01/00/00...
【讨论】: