一些关于设计决策的背景... 我已经开发了一个可以存储点的八叉树结构。我选择基于特定基础体素大小限制“代数”递归。只有在添加点到该节点时,才会创建子节点。这 不是 一个动态图形应用程序 - 这个八叉树和其中的对象都是静态的,因此预处理以提高性能不是一个问题。
现在,我想在我的八叉树中添加“形状” - 具体来说,由三角形组成的表面网格。这些三角形的顶点不对应于存储在八叉树中的点。如何在八叉树中存储这些形状?我看到两个选项...
我看到的大多数八叉树帖子都假定Alt1,但他们从未解释过为什么。Alt2对我来说更有意义,并且只会为驻留在节点边界上的那些形状创建额外的工作。为什么Alt1更可取?
编辑:为了澄清,我的实现语言是C ++,因此我更喜欢该语言的示例实现,但该问题与语言无关。如果标签使用不正确,请原谅。
编辑2:虽然与形状存储的问题无直接关系,但this link有一个关于八叉树遍历的良好讨论,这是问题背后的原因。我认为这可能有助于任何对此问题感兴趣的人。
现在,我想在我的八叉树中添加“形状” - 具体来说,由三角形组成的表面网格。这些三角形的顶点不对应于存储在八叉树中的点。如何在八叉树中存储这些形状?我看到两个选项...
我看到的大多数八叉树帖子都假定Alt1,但他们从未解释过为什么。Alt2对我来说更有意义,并且只会为驻留在节点边界上的那些形状创建额外的工作。为什么Alt1更可取?
编辑:为了澄清,我的实现语言是C ++,因此我更喜欢该语言的示例实现,但该问题与语言无关。如果标签使用不正确,请原谅。
编辑2:虽然与形状存储的问题无直接关系,但this link有一个关于八叉树遍历的良好讨论,这是问题背后的原因。我认为这可能有助于任何对此问题感兴趣的人。
更新:四年后,Alt2的实现变得更加容易,但是由于存储在更高的八叉树层级上的大三角形每次遍历八叉树时都会被测试,因此非常缓慢 - 在我的情况下,这意味着数百到数千个不必要的测试。最终我改进了代码,使用了R*树变体,这很容易实现,并且速度显著提高。