Wie ergibt sich bei einer beliebigen 4x4-Transformationsmatrix das Rotationszentrum?4x4 Transformationsmatrix - Wie finde ich den Drehpunkt heraus?
m = [m11 m12 m13 m14;
m21 m22 m23 m24;
m31 m32 m33 m34;
m41 m42 m43 m44]
Wie ergibt sich bei einer beliebigen 4x4-Transformationsmatrix das Rotationszentrum?4x4 Transformationsmatrix - Wie finde ich den Drehpunkt heraus?
m = [m11 m12 m13 m14;
m21 m22 m23 m24;
m31 m32 m33 m34;
m41 m42 m43 m44]
Wenn Sie wissen, dass m
ist eine reine Rotationsmatrix und nicht die Aggregation mehrerer Transformationen verschiedener Typen, können Sie die Drehachse (Vektor v
) finden, indem die folgende Gleichung zu lösen:
mv = v
Dies funktioniert, weil das Rotieren eines Vektors über sich den Vektor nicht ändert. (Beachten Sie, dass es mehrere Lösungen für diese Gleichung gibt, aber alle unterscheiden sich nur durch einen Skalarfaktor.)
Leider können Sie nicht sicher sein, dass m
keine anderen Transformationen enthält, ich weiß nicht, ob Sie die finden können Achse der Rotation, oder auch wenn eine eindeutige Rotationsachse gefunden werden soll.
Bei einer willkürlichen 4x4-Transformationsmatrix, wie finde ich das Rotationszentrum heraus?
Das Problem kann im allgemeinen Fall nicht gelöst werden, weil Matrix möglicherweise keine Rotation darstellt. Es könnte Projektionsmatrix, Nullmatrix usw. sein.
Abgesehen davon möchten Sie vielleicht this answer überprüfen.
Ihre Matrix stellt eine Transformation dar, die das alte Koordinatensystem in ein neues Koordinatensystem umwandelt.
Object Matrix kann auf diese Weise dargestellt werden:
objx.x objx.y objx.z 0 //m[0][0]..m[0][3] or _11, _12, _13, _14
objy.x objy.y objy.z 0 //m[1][0]..m[1][3] or _21, _22, _23, _24
objz.x objz.y objz.z 0 //m[2][0]..m[2][3] or _31, _32, _33, _34
objpos.x objpos.y objpos.z 1 //m[3][0]..m[3][3] or _41, _42, _43, _44
Wo m [] [] und _11 .._ 44 sind entsprechende Elemente D3DMATRIX, objpos - Objektpositionsvektor, objx - Objekt x ('lokaler x' in Weltraum transformiert) Vektor, etc.
Solange also die letzte Spalte (m [0..3] [3]) 0, 0, 0, 1 ist, können Sie die Objektposition und extrahieren seine "x", "y", "z" Vektoren ("Seite", "oben", "vorne" - was von der Anwendung abhängt) aus der Matrix. Wenn die letzte Spalte nicht "0, 0, 0, 1" ist , Dann ist es Projektionsmatrix und Sie können Objektdaten daraus nicht so einfach extrahieren.
So können Sie einzelnen Vektor und Mittelpunkt des alten Koordinatensystems im neuen Koordinatensystem und einzelne Vektoren extrahieren. Dann können Sie den Mittelpunkt der Rotation herausfinden oder was auch immer Sie wollen.
jedoch für eine Matrixdrehung darstellen, müssen folgende wahr sein:
Und einzelne Achsen richtig ausgerichtet sein sollten (so können Sie sicher sein, das keine "Spiegel" Matrix ist). Die genaue Ausrichtung hängt von Ihrer Anwendung ab. Könnte so etwas wie dieses:
Die zweite und dritte Anweisung sind gleich: dotProduct (objx, objz) == 0 – akaltar
Ich weiß das "m = Translation * Rotation". Gibt es eine Lösung für dieses Problem? –
Ja! m14, m24 und m34 stellen die drei Komponenten der Übersetzung dar. Sie können diese also nullstellen und haben eine reine Rotationsmatrix. – Jeff