本玄C++;欧几里得变换与特征::变换



给定一个由3x3旋转矩阵R和一个三维平移向量的欧几里得变换t,欧几里得变换怎么能使用 Eigen::Transform 实现 ?

X = R * X + t

我目前的方法不起作用:

Eigen::Transform<Type, 3, Eigen::Projective>  transformation;
...
Eigen::AngleAxis           rotation(R);
Eigen::Translation<Type,3> translation(t);
transformation = translation * rotation;

现在,我想将其逐列应用于更大的向量集,即一个 3xN 矩阵X其中每列表示一个向量转换,即

 X = transformation * X

但是,这不起作用并产生断言:

test-depth.exe: /usr/include/eigen3/Eigen/src/Core/Product.h:133: Eigen::Product<Lhs, Rhs, Option>::Product(const Lhs&, const Rhs&) [with _Lhs = Eigen::Matrix<double, 4, 4>; _Rhs = Eigen::Matrix<double, -1, -1>; int Option = 0; Eigen::Product<Lhs, Rhs, Option>::Lhs = Eigen::Matrix<double, 4, 4>; Eigen::Product<Lhs, Rhs, Option>::Rhs = Eigen::Matrix<double, -1, -1>]: Assertion `lhs.cols() == rhs.rows() && "invalid matrix product" && "if you wanted a coeff-wise or a dot product use the respective explicit functions"' failed.

MBo 的评论是正确的,您使用了涉及完全齐次坐标的Projective变换。如果需要在后台使用3x4矩阵,则需要使用Affine转换或AffineCompact

相关内容

  • 没有找到相关文章

最新更新