2013-02-23 22 views
8

Kann ich die Eigen-Bibliothek verwenden, um die Rotationsmatrix zu erhalten, die Vektor A auf Vektor B dreht? Ich habe eine Weile gesucht, kann aber nicht verwandte API finden.Rotationsmatrix in Eigen

Antwort

11

Sie müssen zuerst eine quaternion konstruieren und wandeln sie dann in eine Matrix, zum Beispiel:

#include <Eigen/Geometry> 
using namespace Eigen; 

int main() { 
    Vector3f A, B; 
    Matrix3f R; 
    R = Quaternionf().setFromTwoVectors(A,B); 
} 
+0

erwähnenswert, dass dies erfordert einen zusätzlichen '.toRotationMatrix()' 'nach (A, B)' zu arbeiten, da 'R' eine Matrix ist. –

+1

Nein, es gibt eine Überladung von operator =, die es funktioniert. Allerdings ist das jeweilige explizit, also Matrix3f R = Quaternionf(). SetFromTwoVectors (A, B); 'erfordert' .toRotationMatrix() 'oder explizite Umwandlung in eine' Matrix3f (.) ', Oder explizit den ctor aufzurufen mit 'Matrix3f R (Quaternionf(). setFromTwoVectors (A, B));' – ggael

+0

Sorry mein Fehler! Verpasste diese leichte Subtilität. Danke für die Erklärung der Unterschiede. –