rotierende mehrdimensionale Matrix
Frage
eine 4x4-Matrix gegeben, welche Formel I konnte mit jeder (x, y) Zelle anwenden ergeben, wurde ein (x, y), wenn die Matrix 90 Grad nach rechts gedreht? Ich habe versucht, über jede Zelle laufen, aber unterschiedliche Zellen gab verschiedene Formeln.
die folgende Matrix von Werten gegeben.
0| | | | |
1| | | | |
2| | | | |
3| | | | |
-------------
0 1 2 3
Drehen Der Werte um 90 Grad durch den Wert im beweglichen (x, y) auf den (x, y) Wert in der passenden Zelle unter Verwendung der Matrix unter:
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
ie:
If cell (0,0) has the value 5,
using the translation matrix 5 would move to (3,0).
Hard-Codierung diese Übersetzung Matrix ist mühsam und fehleranfällig, und wenn die Matrixgröße zu großer Zahl wächst dies von Hand tut, ist einfach verzögert.
Lösung
Wenn Sie eine n
von n
Matrix haben, (i, j)
unter der Annahme, bedeutet die i
th Zeile und die j
th Spalte, für eine Drehung nach rechts:
the cell (i, j) will move to (j, n-i)
Hier ist, wie man darüber nachdenkt. Bild, um die gesamte i
th Reihe. Wenn Sie die Matrix drehen, dreht sich die gesamte Reihe in eine gesamte Spalte. Welcher? Es wird Spalten von rechts, das heißt Spalte i
n-i
werden.
Bild nun die gesamte j
th Spalte. Wenn Sie drehen, schaltet sich die Kolonne in Reihe. Welcher? Es wird Reihen von oben j
werden, das heißt, Zeile j
.
Andere Tipps
Heres ein Beispiel mit C-Code
http://bytes.com/topic/c / Antworten / 516.008 drehen-Matrix-any-size