2016-04-22 8 views
1

Ich habe 6 Einheitsvektoren (die die X/Y/Z-Achse darstellen) von 2 beliebigen Koordinatensystemen. Die Vektorwerte des zweiten Koordinatensystems basieren auf dem ersten System. Ich muss ein System in das andere drehen und die passende Quaternion zurückgeben. Was wäre der sinnvollste Weg, dies in C++ zu tun?Quaternion aus 6 Vektoren (ein Koordinatensystem in ein anderes rotieren)

Es gibt eine Reihe von Posts über SO, die über das Konvertieren von Y-Up/Z-Up/Links-/Rechtshänder-Systemen miteinander sprechen, leider brauche ich dies eine generische Lösung für 6 Einheitsvektoren. Danke für alle Einsichten.

+0

'Was wäre der sinnvollste Weg, dies in C++ zu tun?' Https://en.wikipedia.org/wiki/Euler_angles, offensichtlich –

+0

@SeverinPappadeux keine Option, ich brauche eine Quaternion zurückgegeben und kämpfte mit Gimbal Lock vor der Verwendung von Euler-Winkeln. – broozar

Antwort

2

3 orthogonalen Vektoren ist es wahrscheinlich Rotationsmatrix 3x3. Sie können 2 Matrizen erstellen und die relative Rotation als r_relative = r1.transpose() * r2;

Dann konvertieren Matrix Quaternion mit jedem getesteten lib.

oder konvertieren beide Drehungen Quaternion und

q_relative = q1.inverted() * q2;

+0

danke! da dies für motion tracking und bone orientation gedacht ist, habe ich dieses papier gestern gefunden, was im wesentlichen bestätigt, was sie empfehlen, mit den zusätzlichen infos, meine aktuelle knochenorientierung mit der vorherigen in der hierarchie in Bezug zu setzen. [link] (http://publicationslist.org/data/melslater/ref-266/p175- spanlang.pdf) unter 3.1, zweite Spalte – broozar

Verwandte Themen