【发布时间】:2014-08-26 11:09:48
【问题描述】:
我有一个旋转矩阵rot (Eigen::Matrix3d) 和一个平移向量transl (Eigen::Vector3d),我希望它们都在一个 4x4 变换矩阵中。我只是为了我的生活无法弄清楚如何在 Eigen 中做到这一点。我认为 Affine 可以以某种方式使用,但我不明白它是如何工作的。
基本上我想要How translation a matrix(4x4) in Eigen? 和Multiplying Transform and Matrix types in Eigen 的组合
我的代码(由于我不了解 Affine 的工作原理而无法编译)如下所示:
Eigen::Affine3d r(rot);
Eigen::Affine3d t(transl);
Eigen::Matrix4d m = t.matrix();
m *= r.matrix();
【问题讨论】:
-
作为你链接的答案都使用
m = m * t.matrix(),也许问题是缺少运营商*=。是这样的吗? -
我不知道
Eigen,但旋转矩阵通常是一个 3x3 矩阵,您可以直接将其放入 4x4 矩阵中(假设您没有进行任何缩放)。在 4x4 变换矩阵中,元素 _00、_01、_02、_10、_11、_12、_20、_21 和 _22 形成旋转(如果有缩放,则为时间尺度)。元素_30、_31和_32是平移向量元素。 -
@pqnet 不,这也不起作用,我认为问题在于我需要以某种方式指出我希望将不同部分“插入”到主矩阵中的位置。但我根本不知道。
-
@rashmatash,有两种类型的 4x4 矩阵:列顺序的,如 OpenGL 中使用的矩阵,以及行顺序的,如数学或物理中常用的矩阵。因此,平移向量的系数可以是 (3,0)(3,1)(3,2) 或 (0,3)(1,3)(2,3),具体取决于定义。例如:bitbucket.org/Coin3D/coin/src/…