Matrix drehen

Status
Nicht offen für weitere Antworten.

Martin

Mitglied
Kennt jemand einen einfachen Algorithmus um eine Matrix um Vielfache von 90° zu drehen?
Also zum Beispiel:

1 2 3
4 5 6
7 8 9

um 90° nach rechts:

7 4 1
8 5 2
9 6 3.

Oder

1 2 3 4 5
6 7 8 9 0

um 180° gedreht:

0 9 8 7 6
5 4 3 2 1.

mfg, Martin
 

Kanoni

Mitglied
Hi,
nen codeschnippsel hätte ich zwar nicht für dich, aber es sollte wie folgt gehen:

Du gehst deine Matrix / Array von 0 nach $i durch und fügst den $i'ten Datensatz einfach an die Position in der 90°-Matrix.

Ist im eigentlichen nicht schwer, musst nur eine generelle Lösung für alle 3x3 Matritzen finden :)

MFG

Kanoni
 

kopfsalat

Bekanntes Mitglied
Wenn man gleichzeitig eine neue Matrix erzeugen darf, ist das doch simpel.
Einfach 2 geschachtelte for-Schleifen entsprechend durchlaufen lassen.
In-Place stelle ich mir das schwieriger vor, da die Vertauschungen ja nicht immer paarweise sind.

@stevg
Bedenke die Wort-Rotation-Ungleichung: "Rotation-Matrix" != "Matrix-Rotation" :wink:
 
S

stev.glasow

Gast
kopfsalat hat gesagt.:
@stevg
Bedenke die Wort-Rotation-Ungleichung: "Rotation-Matrix" != "Matrix-Rotation" :wink:

Äh, wat? Hast du dir die Seite mal angeschaut? Um eine Matrix im Koordinaten in einem bestimmten Winkel zu drehen brauchst du diese einfach nur mit der entsprechenden Rotationsmatrix zu multiplizieren zumindest steht das da so.
Mein Fehler war, dass ich mir seine Beispiele nicht angesehen habe, denn er meint ja eine ganz andere Rotation, als die im Koordinatensystem. Welche der beiden Rotationsarten man nun in der Mathematik als Matrixrotation bezeichnet weiß ich nicht, spielt auch nicht so die Rolle.
 

Martin

Mitglied
thx. Glaub ich habs. Müsste in etwa so ausschauen (z.B. für 90° nach rechts):

Code:
for i=0, i<width{
   for j=0, j<height{
      matrixNeu(j,width-i)=matrixAlt(i,j)
   }
}

Fürs erste ist es kein Problem eine neue Matrix zu bauen, wenn jemand eine bessere Variante kennt (ohne ein neues Objekt zu erzeugen), wärs natürlich super.

mfg, Martin
 
G

Guest

Gast
Rotation um 180° Grad geht ohne Erzeugen eines neuen Objekts durch hintereinander ausführen von flipud() und fliplr(). Quellcode dazu ist in manchen Matrix-Packages enthalten. Ob man das ganze noch soweit vereinfachen kann, dass es in einem Schleifendurchlauf geht, weiß ich aber leider nicht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen


Oben