相关疑难解决方法(0)

用于从原点迭代离散2D网格上的向外螺旋的算法

例如,这是预期螺旋的形状(以及迭代的每个步骤)

          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],返回第一个网格中的位置为空(或者没有被数据点占用)的网格.

网格大小没有上限.

language-agnostic iteration algorithm recursion

29
推荐指数
6
解决办法
1万
查看次数