拆分四叉树中的节点

时间:2015-07-09 16:42:01

标签: algorithm scala quadtree

我在Scala中实现了一个不可变的四叉树,我无法理解拆分节点会发生什么/什么时候拆分。这些是我的主要参考:Article 1Article 2以及我现在无法找到的第三个参考文献。

我理解四叉树的这三个关键点:

  1. 如果对象至少与节点所覆盖的区域相交,则节点在其子树中包含对象
  2. 四叉树的最大深度D ,不同分支的实际深度可能不同
  3. 叶子节点在分割之前可以包含最多K个对象并成为中间节点。
  4. 注意:对象不是点,但它们是2D形状。

    我当前的实现允许中间节点保存对象,但我想简化它并仅在叶子上允许对象,但这引起了疑问。

    假设K = 2。如果一个节点已经包含2个覆盖其大部分区域的对象并且我添加了第3个大的节点,会发生什么?该节点分为4个子节点(上面的第3点)。所有3个对象都可以与子项相交,因此它们都被移动到每个子项(上面的第1点)。但是现在每个孩子都必须将对象拆分并移动到他们的孩子身上,因为他们只能递送2个对象,等等。

    这个循环无限期地持续(这是不好的)或直到深度= D(上面的第2点)。

    对于3个对象来说,拥有一个全深度的树似乎不是一件好事。我最终将许多叶子上的指针装载到相同的3个物体上,我必须扫描整个深度以寻找碰撞。插入看起来也很昂贵。

    我的理解有什么不对?

0 个答案:

没有答案