【问题标题】:Octree neighbour search八叉树邻居搜索
【发布时间】:2014-02-03 01:16:03
【问题描述】:

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

您可以假设节点存储了一个指向其父节点的指针。(也许还需要其他数据?)

【问题讨论】:

    标签: data-structures language-agnostic octree


    【解决方案1】:

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

    1. 为查询节点的相邻节点生成 3D 索引(只需在每个维度上增加/减少查询节点的 3D 索引)。
    2. 对于每个潜在的邻居,从根开始遍历八叉树,使用生成的 3D 索引来选择在每个具有子节点的节点上采用的路径。

    如果当前节点只有更高深度的邻居(八叉树不完整/完美),则在 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...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多