Rotationsmatrix für Eigenvektoren aus Hauptkompontenanalyse

Neue Frage »

FloG Auf diesen Beitrag antworten »
Rotationsmatrix für Eigenvektoren aus Hauptkompontenanalyse
Hallo,

ich versuch jetzt schon seit einiger Zeit folgendes Problem zu lösen:
Für eine Punktemenge in 3D wird die Hauptkomponentenanalyse durchgeführt. Diese liefert mir dann 3 Vektoren die die Hauptrichtungen für die Punktewolke anzeigen (die 3 Vektoren sind logischerweise orthogonal zu einander). Nun möchte ich jeden Punkt in der Punktewolke so drehen, dass, bei erneuter Berechnung der Hauptrichtungen diese entlang der Hauptachsen meines ursprünglichen Kooridnatensystems sind.

Dazu brauche ich eine Dreh-/Rotationsmatrix die ich dann mit jedem Punkt multipliziere. Wie komme ich nun an diese Matrix?
Ich dachte mir, ganz einfach ich berechne mir den Winkel zwischen dem Hauptrichtungs-Vektor für die jeweilige Achse und dem Einheitsvektor. Anschließend die Rotationsmatrix aufstellen. Aber wie genau?

Wäre wirklich super, wenn ihr mir auf die Sprünge helfen könnten!

Danke
Gruß
Flo
Mazze Auf diesen Beitrag antworten »

Zitat:
Dazu brauche ich eine Dreh-/Rotationsmatrix die ich dann mit jedem Punkt multipliziere. Wie komme ich nun an diese Matrix?


Das ist kein Problem. Eine lineare Abbildung lässt sich eindeutig durch (richtig gewählte) Punkte beschreiben.

Nehme dir die 3 Richtungen her und schreibe auf wo die 3 Richtungen nach der Rotation liegen sollen

Sei A eine 3x3 Matrix dann haben wir die 3 Gleichungen







Du kannst auf diese Weise ein Gleichungssystem mit 9 unbekannten (die Matrixeinträge) und 9 Gleichungen erstellen. Sofern das System lösbar ist erhälst Du so deine Matrix.
FloG Auf diesen Beitrag antworten »

Hallo Mazze,

danke für deine AW.
Hmm, gibt es auch noch eine andere Möglichkeit? Ich sollte das ganze in eine Software integrieren und ein Gleichungssystem mit 9 Gleichungen/Unbekannten ist doch ein recht großer Aufwand zu lösen.

Danke!
Flo
Mazze Auf diesen Beitrag antworten »

Zitat:
Ich sollte das ganze in eine Software integrieren und ein Gleichungssystem mit 9 Gleichungen/Unbekannten ist doch ein recht großer Aufwand zu lösen.


Benutze doch den Gaussalgorithmus, der wird auch in jeder Implementierung verwendet. Welche Software verwendest Du? Vielleicht gibt es ja schon den Gaußalgorithmus integriert.
FloG Auf diesen Beitrag antworten »

Die Software ist in JAVA geschrieben. Ich hab auch schon ein bisschen gegoogelt und das NInJa Projekt gestoßen. Aber irgendwie gibt es da keine Projektwebseite oder Downloadquelle.
Zudem wäre dies halt eine weitere Abhängigkeit/Bibliothek die ich einbinden müsste und das mache nur wenn es keine andere Möglichkeit gibt.
Ist denn mein Ansatz über die Winkel zwischen den Vektoren so falsch? Das wäre doch viel einfacher!?
Mazze Auf diesen Beitrag antworten »

Schau dir mal das an.
 
 
FloG Auf diesen Beitrag antworten »

Kenne ich schon. Ich muss mich wohl Morgen Vormittag noch einmal davor setzen. Aber in diesem Fall sollte das so funktionieren wie ich zu Beginn beschrieben habe?
Also zB für die Drehung der x-Koordinate: Winkel zwischen Einheitsvektor-X und Eigenvektor-X berechnen und dann halt in die Matrix einsetzen...
FloG Auf diesen Beitrag antworten »

Okay, eigentlich könnte ich ja drei Matrizen bilden:

Rotation um die x-Achse:


Rotation um die y-Achse:


Rotation um die z-Achse:


Aber wie kombiniere ich jetzt diese 3 Matrizen, sodass ich nur noch eine Matrix habe die die Rotation in alle drei Richtungen durchführt? unglücklich

Danke
Flo
FloG Auf diesen Beitrag antworten »

Ich bin mittlerweile auf die Eulerwinkel (wikipedia.org) gestoßen und bin mir ziemlich sicher, dass das ist was ich gesucht habe. Jedoch frage ich mich nun wie ich auf die Winkel komme die benötigt werden?
Wie man die Rotationsmatrix für alle drei Richtungen berechnet ist weiter unten in dem Artikel ja gut erklärt. Aber bis dahin ist es wohl noch ein weiter Weg... unglücklich
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »