例如,这是预期螺旋的形状(以及迭代的每个步骤)
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
|
|
Run Code Online (Sandbox Code Playgroud)
线条是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]..
Run Code Online (Sandbox Code Playgroud)
等等
我已经尝试过搜索,但我不确定要搜索什么,我尝试过的搜索结果是什么.
我甚至不确定从哪里开始,除了凌乱,不优雅和特殊的东西,比如为每一层创建/编码新的螺旋.
任何人都可以帮助我开始吗?
此外,有没有一种方法可以轻松地在顺时针和逆时针(方向)之间切换,以及从哪个方向"开始"螺旋?(轮换)
还有,有办法递归吗?
我的应用程序
我有一个填充了数据点的稀疏网格,我想在网格中添加一个新的数据点,并使其与给定的其他点"尽可能接近".
为此,我将调用grid.find_closest_available_point_to(point),它将迭代上面给出的螺旋并返回第一个空位且可用的位置.
首先,它会检查point+[0,0](只是为了完整性).然后它会检查point+[1,0].然后它会检查point+[1,1].然后point+[0,1],返回第一个网格中的位置为空(或者没有被数据点占用)的网格.
网格大小没有上限.