有关如何实现具有周期性限制的四叉树的任何参考?

时间:2009-06-02 18:28:38

标签: tree spatial neighbours

我在平面上有空间数据 - (x,y)点 - 我使用四叉树进行分区。这个想法是找出哪个点是给定(a,b)点的邻居。如果两者之间存在一些(比如L)距离,则这些点是邻居。问题是空间是周期性的,即如果一个点非常靠近边缘(< L),则该点应该是靠近相对边缘的点的邻居。 (在这种情况下,我认为飞机会自行重复)

|=================== | ===================|
|(a, b)         (c,d)| (a, b)      (c,d)  |
|                    |                    |
|  (e,f)             |   (e, f)           |
|               (h,i)|               (h,i)|
|=================== | ===================|
|(a, b)         (c,d)| (a, b)      (c,d)  |
|                    |                    |
|  (e,f)             |   (e, f)           |
|               (h,i)|               (h,i)|
| ================== | ===================|

即点(a,b)和(c,d)和(h,i)应该是邻居。 (a,b)的邻居是圆内的点,半径为L,中心为(a,b)。

论文,操作方法都是受欢迎的。

谢谢,


专家:

感谢您的回答,我没有检查stackoverflow一段时间忙于另一个项目会立即检查您的答案!非常感谢。

3 个答案:

答案 0 :(得分:2)

为什么不将你的“搜索圈”分成带有pi / 2角度的饼图?让我们看看我是否可以通过文本和简单的图像来解决这个问题。

alt text http://img168.imageshack.us/img168/8426/circleinquarters.gif

我们的想法是将“圈子搜索”视为四个“饼图”,因此当您使用C(a,b,L)进行搜索时,您需要考虑到当在四叉树中传递时,圆不仅与四叉树的左上角相交,所以在这种情况下,你必须分支成四个分支(不只是一个,如果这个区域不是周期性的)。

答案 1 :(得分:1)

xdist = min( (x1-x2) % px, (x2-x1) % px )

其中px是x期间。

ydist,剩下的作为读者的练习: - )

答案 2 :(得分:1)

保持四叉树原样似乎更简单,因为只有根级别被定期复制。要考虑周期性,请为每个请求(x+i*dx,y+j*dy,L)执行多个请求(x,y,L)。在i,j上循环,使查询盘与树的根节点相交。