1

У меня есть 2D-массив (StartingArray) NxN (например, 3x3). Я хотел бы мои 2 другие массивы (LRotateArray и RRotateArray) быть StartingArray повернутый на 45 градусов влево и вправо (в каждой строке в LRotateArray и RRotateArray являются диагоналями в StartingArray):Входной сигнал диагональной матрицы

StartingArray: 
1 2 3 
4 5 6 
7 8 9 

LRotateArray: 
1 
4 2 
7 5 3 
8 6 
9 

RRotateArray: 
7 
4 8 
1 5 9 
2 6 
3 

Я хочу, чтобы редактировать LRotateArray и RRotateArray время получение ввода StartingArray.

Я нашел формулу, позволяющую мне генерировать LRotateArray:

if StartingArray[i][j]=k then L_j=i+j 
if j>(N-1-i) then L_i=N-i-j else L_i=i 
LRotateArray[L_i][L_j]=k 

Есть ли простой способ превратить LRotateArray в RRotateArray, или я должен найти другую формулу, как один из приведенных выше?

+0

Получение RRotateArray из StartArray намного проще, чем получение его из LRotateArray. Поэтому я предлагаю вам найти другую формулу для этого. Однако в отношении вашей текущей формулы я понятия не имею, как она будет работать, и некоторые из них (L_i = N = i-j) просто не имеют никакого смысла. –

ответ

1

Здание IMHO RRotateArray от StartingArray проще, чем строить его с LRotateArray. Вот как я мог бы выполнять оба оборота:

for Row := 0 to N - 1 do 
begin 
    for Col := 0 to N - 1 do 
    begin 
    LeftRow := Col + Row; 
    LeftCol := Min(Col, N - 1 - Row); 
    LRotateArray[LeftCol, LeftRow] := StartingArray [Col, Row]; 

    RightRow := Col + (N - Row - 1); 
    RightCol := Min(Col, Row); 
    RRotateArray[RightCol, RightRow] := StartingArray [Col, Row]; 
    end; 
end; 
Смежные вопросы