PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Homogene Koordinaten - vs. "Standard"


Kennung Eins
2017-09-03, 13:59:14
Ich frage mich gerade was.
Homogene Koordinaten werden in der Computergrafik ja gern genutzt, um Transformationen "vereinfacht" zu beschreiben.
Aber da hakt es bei mir. Dafür ein Beispiel:

Angenommen, ich habe eine Rotation und eine Translation, die auf die Position eines Objektes angewandt werden sollen.

In Homogenen Koordinaten hätte ich nun eine 4x4 Matrix, die sowohl die Rotation als auch die Translation beinhaltet. (wo das in der Matrix drin steckt, weiß ich).
Ich würde jetzt als die 4x4 Matrix mit einem 4x1 Vektor multiplizieren.
Damit erhalte ich 4x (4 Multiplikationen, 3 Additionen) = 16 Mult, 12 Add; Dies wäre der Aufwand um mein Ergebnis zu bekommen.

Jetzt mache ich das mal ohne Homogene Koordinaten.
Erst rotiere ich, d.h. 3x3 Matrix mit 3x1 Vektor multiplizieren. Ergibt 3x (3 Mult, 2 Add) = 9 Mult, 6 Add. Dann noch verschieben: 3x1 mit 3x1 multiplizieren, macht 3x (1 Mult) - also haben wir am Ende einen Aufwand von 12 Multiplikationen und 6 Additionen. Also WENIGER Aufwand, als oben beim Anwenden der Homogenen Koordinaten.

Also inwiefern ist es hier besser, homogene Koordinaten zu verwenden?
Wo liegt der Vorteil? Bzw. wann kann der Vorteil ausgespielt werden?



Ach und: Wenn das eine Verfahren die "Homogenen Koordinaten" sind, wie nennt sich dann das andere (das nicht-homogene)? Warum ist es nicht-homogen?

gravitationsfeld
2017-09-03, 14:46:33
4x4-Matrizen lassen sich beliebig multiplizieren. Das heisst jegliche Kette an Transformationen inklusive Translation und Projection lassen sich in einer Matrix ausdruecken am Ende. Das ist der Grund.

Im uebrigen laesst man oft die letzte Reihe im Speicher oft einfach weg und impliziert dass sie 0, 0, 0, 1 ist solange man keine Projektionen braucht. Simplifiziert dann auch die Multiplikation mit einem Vektor.

Kennung Eins
2017-09-03, 15:24:52
Alright. Ich tackle das mal noch ein bisschen weiter.

Also quasi, will man mehrere translationen und rotationen in unterschiedlichen Reihenfolgen etc. ausführen, so kann man die alle einzeln als 4x4 ausdrücken, miteinander multiplizieren und erhält am ende eine finale 4x4 Matrix, die alles enthält. Soweit ist mir das klar und verstanden.

Nur - das kann ich doch auch mit meinen jeweiligen 3x3 und 3x1 Matrizen/Vektoren machen.
Die "finale 4x4" Matrix hätte doch erst dann den Vorteil, wenn ich sie ein zweites Mal anwende. Also wenn ich mehrere Punkte mit dieser Matrix verrechnen will.

Wenn ich jedoch nur einen einzelnen Punkt translieren / rotieren will, dann hilft es mir in dem Moment nichts, dass ich eine zusammengeführte Gesamtmatrix 4x4 habe. Dann könnte ich es auch "herkömmlich" machen, oder?

gravitationsfeld
2017-09-03, 15:37:41
3x3-Matrizen koennen nur Rotationen und Skalierungen ausdruecken. Falls du meinst eine 3x3-Matrix und einen zusaetzlichen Vector fuer die Translation zu benutzen machst du nichts anderes als 4x4-Matrizen zu benutzen wo die unterste Reihen weggelassen wird.

Du kannst nicht einfach die Rotationen verketten und unabhaengig davon die Translationen.

Kennung Eins
2017-09-03, 15:39:52
Ja ich weiß - aber ich kann doch einfach erst die Rotation anwenden, dann die Translation.
Also

m_3x3 * v1_3x1 und dann t_3x1 * v2_3x1

Und das entsprechend auch mit weiteren Rotationen / Translationen (richtige Reihenfolge beachten).
Oder habe ich da einen Denkfehler?

gravitationsfeld
2017-09-03, 15:41:37
Die Translationen werden von vorherigen Rotationen beinflusst und andersrum. Probiers einfach mal an Beispielen aus. Du kannst nicht einfach die Translations-Vektoren addieren in jedem Schritt.

Kennung Eins
2017-09-03, 15:58:11
Jetzt nähern wir uns glaub ich der Sache bzw meinem Unverständnis :)

Die Reihenfolgen sind nicht beliebig, genau. Aber das sollten sie mit 4x4 Matrizen doch ebenfalls nicht sein? Also quasi die immer wiederkehrende Frage, "muss ich jetzt erst rotieren und dann verschieben oder andersrum"?
Wenn ich im R^3 bleibe (d.h. nicht-homogen), dann muss ich sehr auf die Reihenfolge achten.

Warum muss ich das im R^4 nicht?

Ich male es mal auf:

[r1 r2 r3 t1]
[r4 r5 r6 t2]
[r7 r8 r9 t3]
[0 0 0 1]


Angenommen, ich möchte folgendes ausführen:
- erst eine Rotation
- dann die Translation
- dann eine weitere Rotation
- und wieder eine Translation
dann lässt sich das doch beides ausdrücken als R^3 und R^4 Transformation.


[r1 r2 r3 0] [0 0 0 t1] [r11 r12 r13 0] [0 0 0 t11] [p1]
[r4 r5 r6 0] * [0 0 0 t2] * [r14 r15 r16 0] * [0 0 0 t12] * [p2]
[r7 r8 r9 0] [0 0 0 t3] [r17 r18 r19 0] [0 0 0 t13] [p3]
[0 0 0 1] [0 0 0 1] [0 0 0 1] [0 0 0 1] [1]



([r11 r12 r13] (([r1 r2 r3] [p1]) [t1])) [t11]
([r14 r15 r16] * (([r4 r5 r6] * [p2]) * [t2])) * [t12]
([r17 r18 r19] (([r7 r8 r9] [p3]) [t3])) [t13]


Oder nicht?

[Sorry, dass ich so doll nach bohre, ich will das wirklich endlich mal verstehen. Ich wende es seit Jahren an, aber nicht weil ich es verstanden habe, sondern "weil man das so macht" ;)]



Ergänzung:
Angenommen ich tausche die Reihenfolge oben (Erst Translation, dann Rotation, dann Translation, dann Rotation), wie würde ich diesen Reihenfolgentausch in homogenen Koordinaten abbilden?
Jeweils die Inversen Rotationsmatrizen (4x4) nehmen?

gravitationsfeld
2017-09-03, 16:04:08
Eine Multiplikation von einer 3x3-Matrix mit einem Vektor ist keine Translation. Und ja, natuerlich ist die Reihenfolge von affinen Transformationen nicht beliebig.

Kennung Eins
2017-09-03, 16:13:49
Hmm - nein, ein die 3x3 Rotationsmatrix wurde oben mit einem Punkt multipliziert, sodass dieser Punkt rotiert wurde. Dann folgt die Multiplikation mit dem Vektor zwecks Verschiebung - die Klammersetzung ist etwas verwirrend, sorry ging nicht besser.

Ich sehe nun aber noch immer nicht, warum ich nicht im R^3 bleiben sollte ..


Ach, oder meinst du, nachdem ich meinen Punkt rotiert habe (nicht homogen), müsste ich auch meinen Verschiebungsvektor vor Anwendung der Verschiebung ebenfalls rotieren? Ist es das?

Also wäre es im R^3 nicht so:

([r1 r2 r3] [p1]) [t1]
([r4 r5 r6] * [p2]) * [t2]
([r7 r8 r9] [p3]) [t3]


Sondern vermutlich so:

([r1 r2 r3] [p1]) ([r1 r2 r3] [t1])
([r4 r5 r6] * [p2]) * ([r4 r5 r6] * [t2])
([r7 r8 r9] [p3]) ([r7 r8 r9] [t3])

(mal nur die erste Rotation und Translation genommen)

?

gravitationsfeld
2017-09-04, 01:49:22
Du kannst in R3 bleiben, es bringt dir nur nichts was den Rechenaufwand angeht gegenuber einer 4x4-Matrix wo du die untereste Reihe weglaesst.

Falls doch machst du was falsch - sorry.

Kennung Eins
2017-09-04, 08:52:44
Gut, zusammenfassend kann man also sagen, homogene Koordinaten nimmt man quasi nur deswegen, weil man "für Menschen besser nachvollziehbar" bzw. "besser lesbar" Transformationen verketten kann?

gravitationsfeld
2017-09-04, 23:54:21
Nein, weil es mathematisch elegant ist und alle Faelle abdeckt.

Frank
2017-09-05, 22:26:14
Ach und: Wenn das eine Verfahren die "Homogenen Koordinaten" sind, wie nennt sich dann das andere (das nicht-homogene)? Warum ist es nicht-homogen?
Homogen heißt ja wortwörtlich gleichartig, ohne Unterschied. Das kann man auch auf die Rechenoperationen beziehen - Stichwort Dualität - oder halt auf die Elemente des Raumes in dem ich mich bewege. In diesem möchte ich nicht nur die "normalen Dinge" mathematisch beschreiben wollen, sondern auch sogenannte uneigentliche Elemente: bspw. Punkte die unendlich weit weg sind. Ohne homogene Koordinaten geht da gar nichts.

ndrs
2017-09-06, 00:36:04
Ergänzend würde ich als Vorteile noch anführen, dass mehrere sich mehrere Transformationen mittels Transformationsmatrix eleganter zusammen fassen lassen (falls zB Zwischenergebnisse nicht mehr gebraucht werden).
Invertierbarkeit ist auch noch ein Punkt (wobei ich nicht weiß, inwiefern das in der Computergrafik notwendig ist; komme eher aus der Robotik [Stichwort inverse Kinematik])

gravitationsfeld
2017-09-06, 00:58:16
Auch noch was: Normalerweise transformiert man ja nicht nur einen Punkt. Das heisst die Matrix auszurechnen die alle Transformationen enthaelt ist in aller Regel besser als eine Kette von verschiedenen Transformationen auf die Punkte anzuwenden.

MilesEdgeworth
2017-09-06, 18:42:41
Ich klinke mich jetzt hier mal ganz frech ein und hoffe das Thema verstanden zu haben:

Zur Rotation von n-dimensionalen Vektoren können "einfach" n x n Rotationsmatrizen verwendet werden. Sollen nun auch Translationen durch lineare Abbildungen (lies Matrizen) beschrieben werden, muss auf (n+1) x (n+1) Matrizen zurückgegriffen werden (Den Zusammenhang dahinter kann ich nachvollziehen). Dies führt dann zu den homogenen Koordinaten. Praktischerweise sind die n x n Rotationsmatrizen auch als (n+1) x (n+1) Matrizen darstellbar. Dann kann eine (n+1) x (n+1) Matrix bestimmt werden, die eine beliebige Aneinanderreihung der Rotationen und Translationen beinhaltet. So können dann auch Rundungsfehler durch endliche Rechengenauigkeit vermieden werden.

Außerdem können in homogenen Koordinaten Vektoren, die besonders große Elemente beinhalten, durch eine normierte Repräsentation des Vektors samt Skalierungsfaktor dargestellt werden. Auch das dürfte der numerischen Stabilität zu Gute kommen.

Der folgende Artikel hat mir geholfen: http://www-lehre.informatik.uni-osnabrueck.de/~cg/2000/skript/6_4_Homogene_Koordinaten.html

Definitiv ein interessantes Thema, von dem ich heute zum ersten Mal gehört habe... :ugly: Sollte ich irgendetwas falsch verstanden haben, würde ich mich über Hinweise freuen! :)

Frank
2017-09-06, 21:05:10
(...) Dies führt dann zu den homogenen Koordinaten. (...)Das ist schon so grob in Ordnung was Du schreibst aber nicht das Zitat. Die Vereinfachung / Vereinheitlichung von Rechenoperationen fällt als Beiwerk ab.

Wenn ich mich in einem normalen Raum (n-dim) mathematisch fortbewegen möchte, stoße ich halt bei Dingen, welche unendlich weit weg sind, an Grenzen der üblichen Standarddarstellung. Man kann schlecht in einem Ortsvektor ein Unendlich-Zeichen hineinschreiben. Dafür braucht es homogene Koordinaten (n+1 dim). Da man nun all diese unendlich weiten Dinge mit hinzu genommen hat, sagt man auch: der (Ausgangs-) Raum ist nun projektiv abgeschlossen.

MilesEdgeworth
2017-09-06, 22:14:42
Erstmal vielen Dank für Dein Feedback ! :) So gesehen habe ich dann versucht den Zusammenhang aus der falschen Richtung herzustellen.

Das Problem der Darstellung der Unendlichkeit kann ich nachvollziehen. Inwiefern die homogenen Koordinaten das umgehen muss ich mir aber noch einmal anschauen.