3x3-Matrix der Rotation in C++
Okay, zuerst einmal, ich weiß, ähnliche Fragen sind alle über das Internet, ich habe mehr als ich hatte Sorge, um zu zählen, ich habe versucht, um es herauszufinden, für fast 3 Wochen jetzt (nicht ständig, nur auf und ab, in der Hoffnung auf einen Funken der Einsicht).
In das Ende, was ich will, ist eine Funktion, wo Sie gehen, wie viel Sie wollen, drehen Sie durch (momentan bin ich in Radian ist, aber ich kann gehen, Grad oder Bogenmaß) und es gibt die rotationsmatrix, die Erhaltung alle übersetzungen, die ich hatte.
Verstehe ich die Formel zum drehen auf der "Z" - Achse in einem 2D kartesischen Ebene, ist:
[cos(radians) -sin(radians) 0]
[sin(radians) cos(radians) 0]
[0 0 1]
Ich verstehe Matrix Mathematik (Addition, Subtraktion, Multiplikation und Determinanten/Inverse) ziemlich gut, aber was ich nicht verstehen ist wie, Schritt für Schritt, machen Sie eine matrix, die ich verwenden kann für die Fruchtfolge, die Erhaltung einer übersetzung (und was anderes, wie-Skala), die es hat.
Von dem, was ich gesammelt habe von anderen Beispielen, multiplizieren mein Aktueller Matrix (was auch immer das sein mag, lasst uns einfach ein Identity-Matrix für jetzt), durch eine Matrix wie diese:
[cos(radians) - sin(radians)]
[sin(radians) + cos(radians)]
[1]
Aber dann ist meine ursprüngliche Matrix würde am Ende als 3x1-Matrix anstelle eines 3x3, wäre es nicht? Ich bin mir nicht sicher, was mir fehlt, aber etwas scheint einfach nicht richtig zu mir. Ich bin nicht unbedingt auf der Suche nach code für jemanden zu schreiben, für mich, nur um zu verstehen, wie Sie dies richtig tun und dann kann ich schreiben es selbst. (um nicht zu sagen, ich werde nicht Blick auf die anderen code 🙂 )
(Nicht sicher, wenn es darauf ankommt, zu jeder, aber nur im Fall mit Windows 7 64-bit, Visual Studio 2010 Ultimate, und ich glaube, OpenGL, dies ist für die Uni)
Während wir gerade dabei sind, kann jemand überprüfen für mich? Nur um sicherzugehen, es richtig scheint.
Übersetzung Matrix (wieder verwenden wir-Identität) ist so etwas wie dieses:
[1, 0, X translation element]
[0, 1, Y translation element]
[0, 0, 1]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, können Sie nicht haben übersetzung
3x3
matrix für3D
Raum. Sie haben die Verwendung von homogenen4x4
Matrizen.Danach erstellen Sie eine separate matrix für jede transformation (translation, rotation, Skalierung) und multiplizieren Sie Sie, um die endgültige transformation matrix (Multiplikation
4x4
matrix geben Sie4x4
matrix)Können klar einige Punkte:
Ihrem Objekt besteht aus 3D-Punkten, die im Grunde 3 1 Matrizen.
Benötigen Sie einen 3 x 3-drehmatrix drehen Ihres Objekts: R wenn Sie aber auch hinzufügen, übersetzung AGB, Transformations-matrix werden 4 von 4:
R zu Bedingungen, die Sie haben können suchen Sie :http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/, diese sind abhängig vom Drehwinkel der jeweiligen Achse.
In, um sich zu drehen Ihr Objekt, jeden 3D-Punkt wird mit dieser rotation matrix. Für alle 3 um 1 Punkt, Sie müssen auch hinzufügen. - 4. Semester(Skalenfaktor) ist die 1 unter der Annahme fester Skala:
Resultierende Produkt Vektor wird 4 von 1 und der Letzte Begriff ist der Begriff Skala ist die 1 wieder entfernt werden kann.
Resultierende gedrehte Objekt Punkte, die diese neue 3D-Produkt-Punkte.
Ich Stand vor dem gleichen problem und fand eine befriedigende Formel in diese Frage ALSO.
Lassen Sie
(cos0, sin0)
werden jeweils die Kosinus-und Sinus-Werte der Winkel und die(x0, y0)
die Koordinaten für den Mittelpunkt deiner Drehung.Zur Transformation eines 2d-Punkt-Koordinaten
(x,y)
, multipliziert man seine homogene 3x1-Koordinaten(x,y,1)
von dieser 3x3 matrix:Werte der Dritten Spalte sind die Menge der übersetzung notwendig gelten, wenn Sie-drehzentrums ist nicht der Ursprung des Systems.