Ищете алгоритм для идеальной «змеи» из центра поля? - PullRequest
0 голосов
/ 21 января 2019

Я ищу кусок кода:
С середины, по «кругу», медленно до концов краев прямоугольника. И когда он достигает границ с одной стороны, просто пропустите пиксели.

Я уже пробовал несколько безумных приключений, но это было много кода.
У кого-нибудь есть идеи для простого / гениального способа?

Это похоже на запуск игры змея из центра, пока не будет использовано полное поле. Я буду использовать этот способ для сканирования изображения (из середины, чтобы найти первый пиксель рядом с центром в другом цвете).

Может быть, картина могла бы описать это лучше:

maybe a picture describe it better

Ответы [ 2 ]

0 голосов
/ 22 января 2019

С эта ссылка требует 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]])
0 голосов
/ 22 января 2019

как вы относитесь к бегу от края к центру?Кодировать действительно легко, просто запустите из (0; 0), и если вы нажмете край или уже посещенный пиксель, просто поверните направо на 90 *

...