【发布时间】:2012-12-07 01:47:48
【问题描述】:
使用 Eigen 库将仿射变换转换为等距变换(即仅包含旋转和平移)的最简单方法是什么?
这两种变换都是 3D 的。仿射矩阵对左上象限有一个通用的 3x3 矩阵(即旋转、缩放和剪切),而等距矩阵对同一象限有一个 3x3 旋转矩阵,因此需要投影。
Eigen::AffineCompact3f a;
Eigen::Isometry3f b(a);
给出编译错误:
错误 C2338:YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION
同时
Eigen::AffineCompact3f a;
Eigen::Isometry3f b(a.rotation(), a.translation());
给予
(第 2 行)错误 C2661:'Eigen::Transform<_scalar>::Transform':没有重载函数需要 2 个参数
和
Eigen::AffineCompact3f a;
Eigen::Isometry3f b;
b.translation() = a.translation();
b.rotation() = a.rotation();
给予
(第 4 行)错误 C2678:二进制“=”:未找到采用左手的运算符 'const Eigen::Matrix<_scalar>' 类型的操作数(或那里 是不可接受的转换)
考虑到旋转() 和平移() 函数,问题可以改写为“如何最好地设置等距变换的旋转和平移分量?”
【问题讨论】:
-
您应该指定您使用的库或工具包,因为它们不是标准的 C++ 类型或名称。
-
我正在使用 Eigen(一个著名的 C++ 数学库),正如我在标题和正文中所述。我将添加一个链接以使其更清晰。