y
|
|
16 15 14 13 12
17 4 3 2 11
-- 18 5 0 1 10 --- x
19 6 7 8 9
20 21 22 23 24
|
|
这里的线是x轴和y轴。
在每次迭代中,算法会“返回”这些坐标(即点的坐标):
[0,0],
[1,0], [1,1], [0,1], [-1,1], [-1,0], [-1,-1], [0,-1], [1,-1],
[2,-1], [2,0], [2,1], [2,2], [1,2], [0,2], [-1,2], [-2,2], [-2,1], [-2,0]..
我尝试过搜索,但不确定该搜索什么,而且我的尝试都没有结果。
除了创建/编码每层新的螺旋方式之类的混乱、不优雅和临时的方法外,我甚至不知道从哪里开始。
有人能帮我入门吗?
此外,是否有一种可以轻松切换顺时针和逆时针(方向)以及从哪个方向开始“旋转”螺旋的方法?(旋转)
还有没有办法以递归的方式实现这一点?
我的应用程序
我有一个填充有数据点的稀疏网格,并且我想将一个新数据点添加到该网格中,并使其“尽可能接近”给定的其他点。
为此,我将调用grid.find_closest_available_point_to(point)
,它将遍历上面给出的螺旋,并返回第一个为空且可用的位置。
因此,首先它将检查point+[0,0]
(只是为了完整起见)。然后它将检查point+[1,0]
。然后它将检查point+[1,1]
。然后是point+[0,1]
,依此类推。并且返回第一个在网格中的位置为空(或未被数据点占用)的位置。
网格大小没有上限。