C ++ Eigen库中的矢量数组变换

时间:2012-07-30 10:08:10

标签: c++ eigen

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

2 个答案:

答案 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循环通常最容易理解。