【问题标题】:Setting eigen "Transformation" class as column major for post/right multiplication将特征“变换”类设置为后/右乘的列主
【发布时间】:2016-02-29 06:06:21
【问题描述】:

我有一个函数可以对变换矩阵进行大量后/右乘法。现在我想将此函数转换为使用 Eigen,问题是 Eigen Transformation 类将乘法作为前/左乘法。这意味着它在乘法过程中具有行矩阵格式,而存储为列矩阵格式。

有没有办法将 Eigen::Transformation 类成员从行专业更改为列专业?

【问题讨论】:

  • 你为什么说“它在乘法过程中具有行矩阵格式”,为什么会出现问题?

标签: c++ matrix eigen


【解决方案1】:

Eigen Matrix 类的完整签名是

Matrix<typename Scalar,
       int RowsAtCompileTime,
       int ColsAtCompileTime,
       int Options = 0,
       int MaxRowsAtCompileTime = RowsAtCompileTime,
       int MaxColsAtCompileTime = ColsAtCompileTime>

第四个参数Optionsdescribed 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 模板参数,您也可以传递RowMajorColMajor。它生成的任何矩阵都将遵循您指定的相同约定。

Transform<typename Scalar,
          int Dim,
          int Mode,
          int _Options = AutoAlign>

_Options 参数再次描述为

_OptionsMatrix 类中的含义相同。它允许指定DontAlign 和/或RowMajor这些Options 直接传递给底层矩阵类型

【讨论】:

  • 谢谢你的回答,不幸的是我们没有机会改变实际矩阵在转换类中的构造方式。在这种情况下,您有什么建议?
  • 如果您可以按照我的特别要求编辑 Eigen::Transform 的答案,我很乐意将您的答案标记为 true。
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 2017-05-23
  • 2022-10-05
  • 1970-01-01
  • 2022-11-21
  • 2021-07-31
相关资源
最近更新 更多