Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.10.2012, 10:16

3x2-Matrix: Translation und Rotation extrahieren?

Hi,

ich habe hier eine 3x2-Matrix, in der eine Verschiebung und/oder eine Rotation enthalten sein können. Auf welchem Rechenweg komme ich an die reine X- und Y-Verschiebung sowie an den Rotationswinkel?

Danke schon mal für die Mathe-Nachhilfe :-D

2

10.10.2012, 10:32

Nun, natürlich hast du keinerlei Garantie, dass es sich bloß um eine einfache Rotation handelt, wenn du sichergehen willst, solltest du also nach dem Berechnen der Werte aus eben diesen wieder eine Matrix aufstellen und mit der ersten vergleichen.

Eine echte Translation ist mit Matrizen ja nicht möglich, weswegen man eine Dimension Höher geht und die extra Komponente auf 1 setzt. Dann würdest du aber im 2D Fall eher eine 3x3 Matrix benutzen, sonst kannst du mit dem Vektor ja nicht direkt weiter rechnen.
Wie dem auch sei, die Translation steht in der letzten Spalte (bei 3x2 dann wohl eher in der untersten Spalte, wenn du mit transponierten Vektoren arbeitest, was eher ungebräuchlich ist, eigentlich bräuchtest du eine 2x3 Matrix.
Die Rotation kannst du ausrechnen, wenn du dir den Aufbau einer Rotationsmatrix anschaust und dann entsprechend den Arkussinus und Arkuskosinus benutzt. Wie gesagt, vergesse die Probe dabei nicht.
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

10.10.2012, 10:39

Warum genau musst du diese Dinge aus der Matrix extrahieren (sowas ist selten eine wirklich gute Lösung)?
Abgesehen davon, vermute ich, dass es sich um eine 2x3 und nicht um eine 3x2 Matrix handelt?
In dem Fall, wenn es wirklich sein muss: Die Rotation steckt im linken 2x2 Teil und die Translation im übrig bleibenden Spaltenvektor...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (10.10.2012, 10:55)


4

10.10.2012, 11:01

@Bambi: danke, ich werd's probieren!

@dot: Die Matrix ist das Ergebnis einer Mustererkennung mit OpenCV. Da bekomme ich vom Aufruf estimateRigidTransform() (welcher die 2D-Transformation zwischen zwei Punktesets berechnet) ein Object cv::Mat zurück, das rows=2 und cols=3 hat. Deswegen komme ich auf 3x2 und nicht 2x3, OpenCV gibt es schlichtweg so vor. Und um die ermittelten Verschiebung/Rotation dem Benutzer anzeigen zu können, muss ich sie extrahieren.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

10.10.2012, 11:03

Nun in dem Fall, siehe die Informationen in den vorigen Posts. ;)

rnlf

Frischling

Beiträge: 85

Beruf: Softwareingenieur Raumfahrt

  • Private Nachricht senden

6

11.10.2012, 15:12

Randbemerkung: Elmi, wenn deine Matrix tatsächlich 2 Zeilen und 3 Spalten hat, ist es 2x3-Matrix. Erst die Zeilen, dann die Spalten ;-)

rnlf

Frischling

Beiträge: 85

Beruf: Softwareingenieur Raumfahrt

  • Private Nachricht senden

7

12.10.2012, 12:51

Wo?

8

13.10.2012, 03:19

Von mir und dot. Vielleicht eher zwischen den Zeilen. Wobei ich gerade sehe, dass ich einmal Zeile und Spalte vertauscht habe :D
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige