4

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
4

2 回答 2

4

嗯......不知道你为什么在你的例子中使用一个数组。我猜你想通过 rot 转换 m 3 向量,对吧?您可以为此使用 3xm 矩阵。

怎么样

using namespace Eigen;
Quaternionf rot = ...;
Matrix<float,3,Dynamic> series = ...;

series = rot.toRotationMatrix() * series;
于 2012-08-05T09:07:21.363 回答
0

这可能是一个非常生硬但有效的解决方案:

for (int vector = 0; vector < series.cols(); ++vector)
   series.col(vector) = rot * series.col(vector).matrix();

这里的重点是,在某个地方,必须有人阅读您的代码。一个简单的for循环通常最容易理解。

于 2012-07-30T10:24:45.283 回答