вращающаяся многомерная матрица - PullRequest
1 голос
/ 30 октября 2009

Учитывая матрицу 4x4, какую формулу можно применить к каждой ячейке (x, y), чтобы получить (x, y), если матрица была повернута на 90 градусов вправо? Я пытался перебирать каждую ячейку, но разные ячейки давали разные формулы.

Дана следующая матрица значений.

0|  |  |  |  |
1|  |  |  |  |  
2|  |  |  |  |    
3|  |  |  |  |
 -------------
  0   1  2  3  

Поверните значения на 90 градусов, переместив значение в (x, y) в значение (x, y) в соответствующей ячейке, используя следующую матрицу:

0 | 0,3 | 0,2  | 0,1 | 0,0 |
1 | 1,3 | 1,2  | 1,1 | 1,0 |  
2 | 2,3 | 2,2  | 2,1 | 2,0 |    
3 | 3,3 | 3,2  | 3,1 | 3,0 |
  --------------------------
     0     1      2     3

есть:

If cell (0,0) has the value 5, 
using the translation matrix 5 would move to (3,0).

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

Ответы [ 2 ]

3 голосов
/ 30 октября 2009

Если у вас матрица n на n, при условии, что (i, j) означает i-ю строку и j-й столбец, для поворота вправо:

the cell (i, j) will move to (j, n-i)

Вот как ты об этом думаешь. Изобразите всю i строку. Когда вы поворачиваете матрицу, вся эта строка превращается в целый столбец. Который из? Это будут i столбцы справа, то есть столбец n-i.

Теперь представьте себе весь j-й столбец. При вращении столбец превращается в строку. Который из? Это будет j строк сверху, то есть строка j.

0 голосов
/ 30 октября 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...