Я заметил, что есть разница в Eigen C++ и Matlab при расчетах с кватернионами. В Eigen C++ код
Eigen::Quaterniond q;
q.x() = 0.270598;
q.y() = 0.653281;
q.z() = -0.270598;
q.w() = 0.653281;
Eigen::Matrix3d R = q.normalized().toRotationMatrix();
std::cout << "R=" << std::endl << R << std::endl;
дает матрицу вращения:
R=
-2.22045e-16 0.707107 0.707107
0 0.707107 -0.707107
-1 0 -2.22045e-16
Однако в Matlab (который использует wxyz) я получаю следующий результат:
q =
0.6533 0.2706 0.6533 -0.2706
>> quat2dcm(q)
ans =
-0.0000 0 -1.0000
0.7071 0.7072 0
0.7072 -0.7071 -0.0000
что такое транспонирование! Может кто-нибудь объяснить мне, что происходит? Я убедился, что позиции wxyz правильные.
Спасибо