【发布时间】:2016-02-29 06:06:21
【问题描述】:
我有一个函数可以对变换矩阵进行大量后/右乘法。现在我想将此函数转换为使用 Eigen,问题是 Eigen Transformation 类将乘法作为前/左乘法。这意味着它在乘法过程中具有行矩阵格式,而存储为列矩阵格式。
有没有办法将 Eigen::Transformation 类成员从行专业更改为列专业?
【问题讨论】:
-
你为什么说“它在乘法过程中具有行矩阵格式”,为什么会出现问题?
我有一个函数可以对变换矩阵进行大量后/右乘法。现在我想将此函数转换为使用 Eigen,问题是 Eigen Transformation 类将乘法作为前/左乘法。这意味着它在乘法过程中具有行矩阵格式,而存储为列矩阵格式。
有没有办法将 Eigen::Transformation 类成员从行专业更改为列专业?
【问题讨论】:
Eigen Matrix 类的完整签名是
Matrix<typename Scalar,
int RowsAtCompileTime,
int ColsAtCompileTime,
int Options = 0,
int MaxRowsAtCompileTime = RowsAtCompileTime,
int MaxColsAtCompileTime = ColsAtCompileTime>
第四个参数Options 是described as
选项是一个位域。在这里,我们只讨论一点:
RowMajor。 指定该类型的矩阵使用行优先存储顺序;默认情况下,存储顺序为列优先。请参阅存储订单页面。例如,这种类型表示行优先的 3x3 矩阵
所以你可以说,例如,
Matrix<int, 3, 4, ColMajor> foo; // column major
Matrix<int, 4, 3, RowMajor> bar; // row major
More documentation on Storage Orders
如果您指的转换是Eigen::Transform,这也有一个Options 模板参数,您也可以传递RowMajor 与ColMajor。它生成的任何矩阵都将遵循您指定的相同约定。
Transform<typename Scalar,
int Dim,
int Mode,
int _Options = AutoAlign>
_Options 参数再次描述为
_Options与Matrix类中的含义相同。它允许指定DontAlign和/或RowMajor。 这些Options直接传递给底层矩阵类型。
【讨论】: