从场中心寻找完美“蛇”的算法?

时间:2019-01-21 16:08:53

标签: algorithm pseudocode

我正在寻找一段代码:
从中间开始以“圆”的方式缓慢到达矩形边缘的两端。当它到达一侧的边界时,只需跳过像素即可。

我已经尝试过一些疯狂的冒险活动,但这要花很多代码。
有人对简单/明智的方式有任何想法吗?

这就像从中间开始游戏蛇,直到使用了整个视野为止。我将使用这种方式扫描图片(从中间开始查找其他颜色中心附近的第一个像素)。

也许图片可以更好地描述它:

maybe a picture describe it better

2 个答案:

答案 0 :(得分:0)

您如何看待从边缘到中心?编写代码非常容易,只需从(0; 0)开始运行,如果碰到边缘或已经访问过的像素,请向右转90 *

答案 1 :(得分:0)

this link开始当然需要numpy和python。

import numpy as np
a = np.arange(7*7).reshape(7,7)

def spiral_ccw(A):
    A = np.array(A)
    out = []
    while(A.size):
        out.append(A[0][::-1])    # first row reversed
        A = A[1:][::-1].T         # cut off first row and rotate clockwise
    return np.concatenate(out)


def base_spiral(nrow, ncol):
    return spiral_ccw(np.arange(nrow*ncol).reshape(nrow, ncol))[::-1]


def to_spiral(A):
    A = np.array(A)
    B = np.empty_like(A)
    B.flat[base_spiral(*A.shape)] = A.flat
    return B


to_spiral(a)

array([[42, 43, 44, 45, 46, 47, 48],
       [41, 20, 21, 22, 23, 24, 25],
       [40, 19,  6,  7,  8,  9, 26],
       [39, 18,  5,  0,  1, 10, 27],
       [38, 17,  4,  3,  2, 11, 28],
       [37, 16, 15, 14, 13, 12, 29],
       [36, 35, 34, 33, 32, 31, 30]])