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

时间:2017-12-05 10:14:21

标签: c++ grid generic-programming discrete-mathematics spiral

目标是找到具有特定值的最近像素。要做到这一点,我想循环越过像素,从最近的,越来越远的距离,直到我达到符合我的要求(网格的边缘或所需的值)的像素。

我认为这不是重复,尽管之前已经出现了非常类似的问题。

Looping in a spiralanother spiral answer很有用,但它们不会产生按距离中心排序的点数。

Justin L.实际上提到他的应用程序找到最近点,但忽略了实际距离。

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

enter image description here

我希望得到按距离排序的点数 [1, 0] [0, 1] [-1, 0] [0, -1] [1, 1] ... 否则它不会是一个真正的螺旋。

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

我希望这张图片让订单更清晰。

enter image description here

1 个答案:

答案 0 :(得分:0)

我不会将它描述为你所描述的螺旋循环。螺旋是(连接的)路径。你在寻找什么不是一条路。无论如何,我会做以下事情:

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

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

  3. 我不确定,如果这种务实的方法是您正在寻找的。运行时相关的步骤2肯定是快速的。