2013-12-04 3 views
7

так, чтобы она выглядела как алмаз. (это квадратная матрица) с каждой строкой, имеющей еще один элемент, чем строка до начала до средней строки, которая имеет число элементов, равное размерам исходной матрицы, а затем снова отбрасывается с каждой строкой до 1?Можно ли повернуть матрицу на 45 градусов в матрице

+0

Вы спрашиваете о визуализации матрицы как алмаза? –

+0

'Matrix = imrotate (Matrix, 45);' С панелью обработки изображений? – Vuwox

+0

Это больше, чтобы решить поиск слов с помощью strfind. Это легко для форвардов, и я использую fliplr для назад и «для вверх и вниз. Но я не вижу никакого способа сделать 4 диагоналя, кроме поворота на 45 градусов, а затем делать вперед, назад, вверх и вниз с этим? – Nermona

ответ

10

Вращение, конечно, невозможно, так как на основе «сетки» используется матрица.

Но я помню, что ваша первоначально идея была, так что следующее поможет вам:

%example data 
A = magic(5); 

A = 

    17 24  1  8 15 
    23  5  7 14 16 
    4  6 13 20 22 
    10 12 19 21  3 
    11 18 25  2  9 

d = length(A)-1; 
diamond = zeros(2*d+1); 

for jj = d:-2:-d 

    ii = (d-jj)/2+1; 
    kk = (d-abs(jj))/2; 

    D{ii} = { [zeros(1,kk) A(ii,:) zeros(1,kk) ] }; 
    diamond = diamond + diag(D{ii}{1},jj); 
end 

вернет бриллиант:

diamond = 

    0  0  0  0 17  0  0  0  0 
    0  0  0 23  0 24  0  0  0 
    0  0  4  0  5  0  1  0  0 
    0 10  0  6  0  7  0  8  0 
    11  0 12  0 13  0 14  0 15 
    0 18  0 19  0 20  0 16  0 
    0  0 25  0 21  0 22  0  0 
    0  0  0  2  0  3  0  0  0 
    0  0  0  0  9  0  0  0  0 

Теперь вы можете снова искать для слов или шаблонов строка за строкой или столбцом по столбцу, просто удалите нули:

Представьте, что вы извлечь одну строку:

row = diamond(5,:) 

вы можете извлечь ненулевые элементы с find:

rowNoZeros = row(find(row)) 

rowNoZeros = 

    11 12 13 14 15 

Не настоящий бриллиант, но, вероятно, также полезно:

(Идея в комментариях @beaker. Я удалю эту часть, если он разместит ее самостоятельно.)

B = spdiags(A) 

B = 

    11 10  4 23 17  0  0  0  0 
    0 18 12  6  5 24  0  0  0 
    0  0 25 19 13  7  1  0  0 
    0  0  0  2 21 20 14  8  0 
    0  0  0  0  9  3 22 16 15 
+0

Это большое спасибо. Хотя еще один вопрос, как удалить/не считать нули? – Nermona

+0

@Nermona посмотреть на мое редактирование – thewaywewalk

+0

Так полезно, спасибо! – Nermona

Смежные вопросы