通过离散网格上的真实螺旋循环

Looping through a real spiral on a discrete grid

目标是找到具有特定值的最近像素。为此,我想遍历像素,从最近的像素开始,随着距离的增加,直到达到符合我要求的像素(网格边缘或所需值)。

我相信这不是重复的,尽管之前出现过非常相似的问题。

Looping in a spiral or 很有用,但它们不会生成按到中心的距离排序的点。

Justin L.其实提到了他申请寻找最近点,却忽略了实际距离

例如,此图像中的算法会在 [0, 1] 之前找到 [1, 1],尽管 [0, 1] 比 [1, 1](距离 √)更近(距离 1) 2).

我想得到点按距离排序 [1, 0] [0, 1] [-1, 0] [0, -1] [1, 1] ... 否则就不是真正的螺旋了。

This answer建议以非常小的步长螺旋,但由于我不知道我需要螺旋多远,这听起来效率很低。

我希望这张图能让顺序更清楚。

我不会将其命名为螺旋 循环,如您所描述的那样。螺旋是一条(连接的)路径。您正在寻找的不是路径。无论如何,我会做以下事情:

  1. 在预处理步骤中,将网格的所有坐标(包括它们到中心的距离)添加到例如std::vector 并按到中心的距离排序。然后通过在网格中为每个坐标存储偏移量来构建索引table。

  2. 在运行时使用索引 table 遍历网格。

不过我不确定这种务实的方法是否是您正在寻找的。与运行时相关的第 2 步肯定很快。