转换C++特征库中的矢量数组

Transform vector array in C++ Eigen library

本文关键字:数组 C++ 特征 转换      更新时间:2023-10-16

开始使用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

嗯。。。不确定为什么在示例中使用Array。我想你想用rot变换m-向量,对吧?你可以使用一个3xm矩阵。

怎么样

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

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

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

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