从场地中心寻找完美 "snake" 的算法?
Looking for an algorithm for a perfect "snake" from the center of a field?
我正在寻找一段代码:
从中间开始,以 "circle" 的方式,慢慢地到达矩形边缘的两端。当它到达一侧的边界时,只需跳过像素。
我已经尝试了一些疯狂的冒险,但代码太多了。
有人知道 simple/ingenious 方法吗?
好像是从中心开始游戏蛇,直到用完全场。我将使用这种方式扫描图片(从中间开始以另一种颜色找到靠近中心的第一个像素)。
也许一张图片可以更好地描述它:
您如何看待 运行 从边缘到中心?编码真的很容易,只需从 (0;0) 运行 开始,如果您碰到边缘或已经访问过的像素,只需右转 90*
From 当然需要 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]])
我正在寻找一段代码:
从中间开始,以 "circle" 的方式,慢慢地到达矩形边缘的两端。当它到达一侧的边界时,只需跳过像素。
我已经尝试了一些疯狂的冒险,但代码太多了。
有人知道 simple/ingenious 方法吗?
好像是从中心开始游戏蛇,直到用完全场。我将使用这种方式扫描图片(从中间开始以另一种颜色找到靠近中心的第一个像素)。
也许一张图片可以更好地描述它:
您如何看待 运行 从边缘到中心?编码真的很容易,只需从 (0;0) 运行 开始,如果您碰到边缘或已经访问过的像素,只需右转 90*
From
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]])