Question

Étant donné une matrice 4x4, quelle formule pourrais-je appliquer à chaque cellule (x, y) pour obtenir un (x, y) si la matrice était tournée de 90 degrés vers la droite? J'ai essayé de parcourir chaque cellule, mais différentes cellules ont donné différentes formules.

Étant donné la matrice de valeurs suivante.

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

Faites pivoter les valeurs de 90 degrés en déplaçant la valeur entre (x, y) sur la valeur (x, y) de la cellule correspondante à l'aide de la matrice ci-dessous:

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

c'est-à-dire:

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

Le codage en dur de cette matrice de traduction est fastidieux et sujet aux erreurs, et si la taille de la matrice atteint des nombres énormes, le faire à la main est simplement retardé.

Était-ce utile?

La solution

Si vous avez une matrice n par n , en supposant que (i, j) signifie que le i th ligne et la j ème colonne, pour une rotation à droite:

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

Voici comment vous en pensez. Imaginez la totalité i rangée. Lorsque vous faites pivoter la matrice, toute la ligne se transforme en une colonne entière. Laquelle? Ce seront les i colonnes de droite, c'est-à-dire la colonne n-i .

Imaginez maintenant la totalité j ème colonne. Lorsque vous faites pivoter, la colonne se transforme en ligne. Laquelle? Ce seront les j lignes du haut, c’est-à-dire la ligne j .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top