2017-05-10 8 views
1

Ich benutze Eigen-Bibliothek, um Matrix zu Quaternion zu konvertieren, aber wenn ich eine der Matrix zu Quaternion umwandeln und es zurückbrennen, entpuppt es sich als eine andere Matrix, die Identitätsmatrix ist. Die von mir verwendete Rotationsmatrix wurde von einer Transformationsmatrix zerlegt.Eigen: Matrix zu Quaternion und zurück haben unterschiedliche Ergebnisse

Eigen::Matrix3f R3d = R.topLeftCorner<3,3>(); 
    *Rquat = R3d; 

    R3d = (*Rquat).normalized().toRotationMatrix(); 

Was kann dieses Problem verursachen? This is the matrix before change to quaternion

und This is the matrix when I turn it back form the quaternion

+0

Die Matrix, die Sie übergeben, ist eine Reflektion, daher können Sie keine gültige Quaternion daraus erhalten. Welche Version von Eigen verwendest du? – chtz

+0

Ich verwende Eigen 3 – JOYD

+0

Also Version 3.0? Das ist seit einiger Zeit veraltet ... – chtz

Antwort

0

habe gerade überprüft die Umsetzung der Eigen's matrix to quaternion conversion. Es basiert auf "Quaternion Calculus und Fast Animation" von Ken Shoemake.

Und wie man sehen kann, wenn man die Quelle analysiert, nimmt dies an, dass die Matrix tatsächlich eine Rotationsmatrix (oder nahe bei einer) ist. Tatsächlich ergeben alle symmetrischen Matrizen mit M.trace()>0 eine (skalierte) Identitätsquaternion. Wenn Sie für ungültige Rotationsmatrizen noch etwas anderes erwarten, müssen Sie eine eigene Konvertierungsmethode implementieren.

Verwandte Themen