matrice multidimensionale rotante
Domanda
Data una matrice 4x4, quale formula potrei applicare a ciascuna cella (x, y) per produrre una (x, y) se la matrice fosse ruotata di 90 gradi a destra? Ho provato a scorrere su ogni cella ma celle diverse hanno fornito formule diverse.
Data la seguente matrice di valori.
0| | | | |
1| | | | |
2| | | | |
3| | | | |
-------------
0 1 2 3
Ruota i valori di 90 gradi spostando il valore in (x, y) sul valore (x, y) nella cella corrispondente usando la matrice seguente:
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
vale a dire:
If cell (0,0) has the value 5,
using the translation matrix 5 would move to (3,0).
La codifica hard di questa matrice di traduzione è noiosa e soggetta a errori, e se le dimensioni della matrice diventano enormi, farlo manualmente viene ritardato.
Soluzione
Se hai una matrice n
per n
, supponendo (i, j)
significa i
th riga e la colonna j
, per una rotazione verso destra:
the cell (i, j) will move to (j, n-i)
Ecco come ci pensi. Immagina la intera i
th riga. Quando si ruota la matrice, l'intera riga si trasforma in un'intera colonna. Quale? Saranno i
colonne da destra, ovvero colonna n-i
.
Ora immagina la intera j
th colonna. Quando si ruota, la colonna si trasforma in riga. Quale? Saranno j
righe dall'alto, ovvero riga j
.
Altri suggerimenti
Ecco un esempio con il codice C
http://bytes.com/topic/c / risposte / 516008-gira-matrice qualsiasi dimensione