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.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top