八月邻居搜索

时间:2014-02-01 20:01:54

标签: data-structures language-agnostic octree

我有一个八叉树,它存储一个基于体素的液体。当我模拟流体时,我需要访问当前节点周围的树叶,我该如何实现这样的搜索?

您可以假设节点存储指向其父节点的指针。(可能需要其他数据?)

1 个答案:

答案 0 :(得分:7)

假设每个八叉树节点也在八叉树(及其深度)中保存其3D索引[1]。

  1. 为查询节点的邻居节点生成3D索引(只需递增/递减每个维度中查询节点的3D索引)。
  2. 对于每个潜在的邻居,从根目录遍历八叉树,使用生成的3D索引选择每个带有子节点的路径。
  3. 如果当前节点仅具有较高深度的邻居(八叉树不完整/完美),则在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 ......