因此,从理论上讲,我需要一些集思广益的帮助。现在,我有一些代码可以绘制一些对象。这些对象位于四叉树的叶子中。现在,随着对象移动,我想将它们放置在四叉树的正确叶子中。
现在,我只是在更改对象位置后在对象上重建四叉树。我试图找到一种方法来纠正树而不完全重建它。我能想到的就是有一堆指向相邻叶节点的指针。
有没有人知道如何找出对象移动到的节点,而不仅仅是到处都有大量的指针或与此相关的文章链接?我所能找到的只是构建四叉树的不同方法,与更新它无关。
最佳答案
如果我理解你的问题。您需要某种空间坐标与四叉树上的叶子之间的映射方式。
这是我一直在研究的一种可能的解决方案:
为了简单起见,让我们先做一维案例。并假设我们在x中有32个网格点。然后,每个网格点都对应于深度为5的四叉树上的某个叶子。 (深度0 =整个网格,深度1 = 2点,深度2 = 4点...深度5 = 32点)。
每片叶子可以由通向叶子的分支索引表示。在每个级别上,我们可以将两个分支标记为A和B。因此,特定的叶子可能被标记为BBAAB,这意味着沿着B分支,B分支,A分支,B分支然后B分支。
因此,您如何映射例如BBABB到0..31之间的x网格点?只需将其转换为二进制,以使BBABB-> 11011 =27。因此,从网格点到叶节点的映射只需将字母A和B转换为0和1,然后将结果解释为二进制数即可。
对于2D情况,只是稍微复杂一点。现在我们每个节点有四个分支,因此我们可以使用四个字母的字母来标记每个分支路径,例如从根开始,到第三个分支,再到第四个分支,再到第一个分支,再到第二个分支,再到第二个分支,我们将生成字符串CDABB。
现在将字符串(例如“CDABB”)转换为一对网格值(x,y)。
假设A为左下,B为右下,C为左上,D为右上。然后,象征性地,我们可以写成A.x = 0,A.y = 0 / B.x = 1,B.y = 0 / C.x = 0,C.y = 1 / D.x = 1,D.y = 1。
以CDABB为例,我们首先查看其x值(CDABB).x =(01011),这为我们提供了x网格点。对于y同样如此。
最后,如果您想找出例如该节点紧靠CDABB的右侧,然后将其转换为x和y中的一对二进制数,将x值加+1,然后将新的一对二进制数转换回字符串。
我敢肯定这一切都已被发现,但我尚未在网上找到此信息。
关于quadtree - 四叉树对象移动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7919336/