【问题标题】:Looping through a real spiral on a discrete grid循环通过离散网格上的真实螺旋
【发布时间】:2018-05-18 23:06:13
【问题描述】:

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

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

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

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

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

我想获得按距离排序的积分 [1, 0] [0, 1] [-1, 0] [0, -1] [1, 1] ... 否则它不会是一个真正的螺旋。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我找不到更好的方法。我最终将距离存储在一个文件中,因为在 2048x2048 网格上计算速度相当慢。
    猜你喜欢
    • 2011-04-11
    • 2010-09-28
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多