我有一个矩形单元网格,覆盖距离坐标系原点一定距离的平面,并希望识别从原点开始的直线与之相交的网格单元格。
网格上的单元格具有相同的大小(dx,dy),单元格之间没有间隙,但由于平面上的每个单元格与原点的距离不同,因此它们所覆盖的立体角不是恒定的 - 如果我可以找到一个简单的函数,将方向(theta,phi)转换为单元格索引(ix,iy)。
目前我使用类似最近邻搜索的东西来查找单元格,但这并没有充分利用我的单元格的“网格化”。是否有任何算法可以帮助我改进这一点?
修改 我知道我可以使用简单的三角函数来获取单元格,但我更感兴趣的是在常规间隔输入上进行最近邻搜索的算法。
答案 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))。