目标是找到具有特定值的最近像素。要做到这一点,我想循环越过像素,从最近的,越来越远的距离,直到我达到符合我的要求(网格的边缘或所需的值)的像素。
我认为这不是重复,尽管之前已经出现了非常类似的问题。
Looping in a spiral或another spiral answer很有用,但它们不会产生按距离中心排序的点数。
Justin L.实际上提到他的应用程序找到最近点,但忽略了实际距离。
例如,此图像中的算法会在[0,1]之前找到[1,1],尽管[0,1]与[1,1]相比更近(距离为1)(距离为√2)
我希望得到按距离排序的点数
[1, 0] [0, 1] [-1, 0] [0, -1] [1, 1] ...
否则它不会是一个真正的螺旋。
This answer建议以非常小的步长螺旋,但由于我不知道我需要螺旋多远,这听起来非常低效。
我希望这张图片让订单更清晰。
答案 0 :(得分:0)
我不会将它描述为你所描述的螺旋循环。螺旋是(连接的)路径。你在寻找什么不是一条路。无论如何,我会做以下事情:
在预处理步骤中,添加网格的所有坐标,包括它们到中心的距离,例如std::vector
并根据到中心的距离进行排序。然后通过在每个坐标的网格中存储偏移量来构建索引表。
在运行时使用索引表遍历网格。
我不确定,如果这种务实的方法是您正在寻找的。运行时相关的步骤2肯定是快速的。