我在Scala中实现了一个不可变的四叉树,我无法理解拆分节点会发生什么/什么时候拆分。这些是我的主要参考:Article 1,Article 2以及我现在无法找到的第三个参考文献。
我理解四叉树的这三个关键点:
注意:对象不是点,但它们是2D形状。
我当前的实现允许中间节点保存对象,但我想简化它并仅在叶子上允许对象,但这引起了疑问。
假设K = 2。如果一个节点已经包含2个覆盖其大部分区域的对象并且我添加了第3个大的节点,会发生什么?该节点分为4个子节点(上面的第3点)。所有3个对象都可以与子项相交,因此它们都被移动到每个子项(上面的第1点)。但是现在每个孩子都必须将对象拆分并移动到他们的孩子身上,因为他们只能递送2个对象,等等。
这个循环无限期地持续(这是不好的)或直到深度= D(上面的第2点)。
对于3个对象来说,拥有一个全深度的树似乎不是一件好事。我最终将许多叶子上的指针装载到相同的3个物体上,我必须扫描整个深度以寻找碰撞。插入看起来也很昂贵。
我的理解有什么不对?