我有一个八叉树,它存储一个基于体素的液体。当我模拟流体时,我需要访问当前节点周围的树叶,我该如何实现这样的搜索?
您可以假设节点存储指向其父节点的指针。(可能需要其他数据?)
答案 0 :(得分:7)
假设每个八叉树节点也在八叉树(及其深度)中保存其3D索引[1]。
如果当前节点仅具有较高深度的邻居(八叉树不完整/完美),则在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 ......