通过离散网格上的真实螺旋循环
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建议以非常小的步长螺旋,但由于我不知道我需要螺旋多远,这听起来效率很低。
我希望这张图能让顺序更清楚。
我不会将其命名为螺旋 循环,如您所描述的那样。螺旋是一条(连接的)路径。您正在寻找的不是路径。无论如何,我会做以下事情:
在预处理步骤中,将网格的所有坐标(包括它们到中心的距离)添加到例如std::vector
并按到中心的距离排序。然后通过在网格中为每个坐标存储偏移量来构建索引table。
在运行时使用索引 table 遍历网格。
不过我不确定这种务实的方法是否是您正在寻找的。与运行时相关的第 2 步肯定很快。
目标是找到具有特定值的最近像素。为此,我想遍历像素,从最近的像素开始,随着距离的增加,直到达到符合我要求的像素(网格边缘或所需值)。
我相信这不是重复的,尽管之前出现过非常相似的问题。
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建议以非常小的步长螺旋,但由于我不知道我需要螺旋多远,这听起来效率很低。
我希望这张图能让顺序更清楚。
我不会将其命名为螺旋 循环,如您所描述的那样。螺旋是一条(连接的)路径。您正在寻找的不是路径。无论如何,我会做以下事情:
在预处理步骤中,将网格的所有坐标(包括它们到中心的距离)添加到例如
std::vector
并按到中心的距离排序。然后通过在网格中为每个坐标存储偏移量来构建索引table。在运行时使用索引 table 遍历网格。
不过我不确定这种务实的方法是否是您正在寻找的。与运行时相关的第 2 步肯定很快。