在网格中查找具有不同网格单元大小的单元格

时间:2010-03-10 20:56:01

标签: c++ algorithm boost

我有一个矩形单元网格,覆盖距离坐标系原点一定距离的平面,并希望识别从原点开始的直线与之相交的网格单元格。

网格上的单元格具有相同的大小(dx,dy),单元格之间没有间隙,但由于平面上的每个单元格与原点的距离不同,因此它们所覆盖的立体角不是恒定的 - 如果我可以找到一个简单的函数,将方向(theta,phi)转换为单元格索引(ix,iy)。

目前我使用类似最近邻搜索的东西来查找单元格,但这并没有充分利用我的单元格的“网格化”。是否有任何算法可以帮助我改进这一点?

修改 我知道我可以使用简单的三角函数来获取单元格,但我更感兴趣的是在常规间隔输入上进行最近邻搜索的算法。

2 个答案:

答案 0 :(得分:1)

  

[...]但我更感兴趣的是有哪些算法可以在规则间隔的输入上进行最近邻搜索。

虽然它们的数据结构非常具体,但我认为您应该看看以下内容:

答案 1 :(得分:1)

但是没有一个独特的细胞会相交。你的意思是确切地说是细胞的中心吗?

通常,在第一象限(即x> 0,y> 0)中,如果你有一个填充矩形(x,y)的单元格 - > (x + 1,y + 1),那么角度在atan2(y+1,x)atan2(x,y+1)之间的任何线都将至少与细胞的一部分相交。

无论如何,如果您想进行一般的最近邻搜索,您应该将数据划分为quad-tree。它是2D中最近邻计算的主力之一。如果您的数据稀疏,您也可以执行多尺度网格(这实际上只是四叉树的一种特殊情况,具有特别规则的细分模式,但这会为您提供恒定时间查找而不是log(N))。