algorithm - 从树叶构建一棵八叉树?

标签 algorithm graphics tree geometry computational-geometry

设置

假设我们有一个描述空间的 3D 立方体。我们将这个立方体分割为 8 个不同的较小立方体,这些立方体描述了八分之一的空间,我们继续这样做多次。

这是一棵树,其中根是整个空间,每个子节点都是更高分割级别的子部分,达到最大分辨率。

即第一层是完整空间,接下来是 8 个子空间,接下来的 64 个子空间……最多 8^n 个子空间。

这些节点中的每一个都可以存在于两种状态之一,占用或空。空节点没有任何子节点,占用节点至少有一个非空子节点,除非它们是叶子。

问题

我得到了一个最低分辨率级别的数组(最小的子空间,即叶子)。该数组包含占用叶的离散化 (x,y,z) 坐标。换句话说,这个数组中只有被占用的叶子,没有明确给出空叶子,所以如果在这个数组中没有找到叶子,我们可以认为它是空的。

信息未按任何特定顺序给出,但每个叶子自身通过其 (x,y,z) 坐标标识其在 3D 空间中的位置。

使用这些信息,我们想要构建所描述的树。换句话说,我们想要创建一棵空叶没有 child 的八叉树。

我怎样才能有效地构建上述树?

最佳答案

一种直接的方法是将叶子一个一个地插入到最初为空的八叉树中,并在插入时创建缺失的节点。

总成本大致与叶子数量乘以(平均)树高成正比。

关于algorithm - 从树叶构建一棵八叉树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50340180/

相关文章:

检查关系传递性的算法?

c# - 从顶点组合中找到最小的不规则多边形(性能关键)

math - 不使用位操作的随机数生成

python - 如何导航实例方法?

Android:给定一个点设置谷歌地图缩放和位置的算法

python - 选择更大的球

internet-explorer - 在Internet Explorer 9(ie9)中具有透明度的缩放png文件具有锯齿状边缘

r - 使用color参数时,更改R {graphics}中的alpha值

java - Java 中的数字文件到二叉树

java - 如何在 SWT/JFace 中设置双击编辑表格单元格?