在Eigen数学库中入门,我遇到了一项非常简单的任务:使用四元数转换一系列向量。似乎我所做的一切都没有找到operator*
,或者将数组与矩阵混合。
Eigen::Quaternionf rot = …;
Eigen::Array3Xf series = …;
// expected this to work as matrix() returns a Transformation:
series.matrix().colwise() *= rot.matrix();
// expected these to work as it's standard notation:
series = rot.matrix() * series.matrix().colwise();
series = rot.toRotationMatrix() * series.matrix().colwise();
// Also tried adding .homogeneous() as one example used it… no dice
答案 0 :(得分:3)
嗯...不确定为什么在你的例子中使用数组。我想你想用腐烂变换m 3矢量,对吧?你可以使用3xm矩阵。
怎么样
using namespace Eigen;
Quaternionf rot = ...;
Matrix<float,3,Dynamic> series = ...;
series = rot.toRotationMatrix() * series;
答案 1 :(得分:0)
这可能是一个非常生硬但有效的解决方案:
for (int vector = 0; vector < series.cols(); ++vector)
series.col(vector) = rot * series.col(vector).matrix();
这里的重点是,有人必须阅读你的代码。简单的for
循环通常最容易理解。