3D-Geometrie: Ein Paar Punkte-Transformation zu parallel zu einer anderen ausgerichtet werden

StackOverflow https://stackoverflow.com/questions/253546

Frage

Ich habe eine Linie (eigentlich ein Würfel) gehen von (x1, y1, z1) bis (x2, y2, z2). Ich mag es so drehen, dass es entlang einer anderen Linie, die von (x3, y3, z3) bis (x4, y4, z4) ausgerichtet ist. Derzeit verwende ich Math::Atan2 zusammen mit Matrix::RotateYawPitchRoll. Irgendwelche bessere Möglichkeiten, dies zu tun?

Edit: Ich denke, dass ich diesen Beitrag formuliert haben sehr schlecht. Was ich eigentlich auf der Suche für eine Rotation Matrix aus zwei Vektoren.

War es hilfreich?

Lösung

Ja, Sie können dies tun, ohne überhaupt in Bezug auf den Winkel denken zu müssen.

Da man einen Würfel haben, nehme man eine Ecke auswählen und dann definieren die Kanten 3 von als Vektoren f0 ausstrahlende, f1, f2 (das sind Richtungsvektoren, relativ zu der Ecke Sie ausgewählt haben). Normalisieren diese und schreibt sie als Spalten in einer Matrix F

(f0x f1x f2x)
(f0y f1y f2y)
(f0z f1z f2z)

Jetzt tun die gleiche Sache für die Vektoren t0, t1, t2 des Würfels Sie drehen wollen und nennen es Matrix T.

Jetzt ist die Matrix R = T * Inverse (F) ist die Matrix, die sich aus der Ausrichtung des ersten Würfels auf die Orientierung der zweiten (weil inverse F Karten zB f0 bis (1 0 0 dreht)‘, und dann T Karten (1 0 0)‘zu t0).

Wenn Sie wissen wollen, warum das funktioniert, denken in der Systembasisvektoren koordinieren: Wenn Sie die XY und Z-Achsen auf ein neues Koordinatensystem gedreht werden soll, und die Spalten der Rotationsmatrix sind nur die Vektoren Sie wollen (1 0 0) '(0 1 0)' und (0 0 1)‘werden abgebildet. T * Inverse (F) ist Ihren Würfel von der ursprünglichen Ausrichtung effektiv Drehachse ausgerichtet ist, und dann in der gewünschten Ausrichtung.

(Sorry, oben ist für Spaltenvektoren und transformiert auf der linken Seite, OpenGL-Stil. Ich glaube mich zu erinnern, Zeilenvektoren Direct3D ist und wandelt auf der rechten Seite, aber es sollte klar sein, wie es um zu wechseln).

Es gilt auch genauso gut auf 4x4 Matrizen mit einer Übersetzungskomponente zu.

Andere Tipps

Sie könnten hinzufügen möchten, wie man tatsächlich die Matrizen interpolieren. Quell- und Ziel-Matrizen sind in Ordnung in Ihrer Antwort, aber die Berechnung der inversen ist sinnlos. Quaternionen werden Sie den kürzesten Drehweg geben, so auf beiden Matrizen, die die Dreh 3x3 Matrizen nehmen, konvertieren diejenigen zu Quaternionen und Lerp. Hat einen separaten Lerp für die Übersetzung und neu zusammenstellen. Google für quaternion - Matrix und zurück Umbauten und quaternion Lerp.

Edit: Eine Rotationsmatrix von einem vorderen und einem Aufwärts-Vektor ist trivial. Die fehlende Spalte ist das Kreuzprodukt der beiden anderen Vektoren. (Vergessen Sie nicht Spalten zu normalisieren).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top