我在平面上有空间数据 - (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一段时间忙于另一个项目会立即检查您的答案!非常感谢。
答案 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上循环,使查询盘与树的根节点相交。