2013-02-23 2 views
8

Могу ли я использовать библиотеку Eigen для получения матрицы вращения, которая вращает вектор A на вектор B? Я искал какое-то время, но не могу найти связанный api.Матрица вращения в Eigen

ответ

11

Сначала нужно построить quaternion, а затем преобразовать его в матрицу, например:

#include <Eigen/Geometry> 
using namespace Eigen; 

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

Стоит отметить, что это требует дополнительного '.toRotationMatrix()' после '(A, B)' в работа, так как «R» является матрицей. –

+1

Нет, есть перегрузка оператора =, что заставляет его работать. Тем не менее, соответствующий явный, поэтому 'Matrix3f R = Quaternionf(). SetFromTwoVectors (A, B);' требует '.toRotationMatrix()' или явного приведения в 'Matrix3f (.)' Или явно вызвать ctor с 'Matrix3f R (Quaternionf(). setFromTwoVectors (A, B));' – ggael

+0

Извините, моя ошибка! Пропустил эту небольшую тонкость. Спасибо за объяснение различий. –