Eigen::Isometry3d
和Eigen::Matrix4d::Identity()
都是在Eigen库中用于表示变换的类,但它们的用途和性质有所不同。
Eigen::Isometry3d
是一个特殊的4x4矩阵,用于表示欧几里得空间中的刚体变换,即旋转和平移。它保证了距离的不变性,即变换前后点之间的距离保持不变。这对于许多物理和几何应用来说是非常重要的。Eigen::Isometry3d
内部使用一个旋转矩阵和一个平移向量来存储变换,这使得操作和组合这些变换更加高效。
Eigen::Matrix4d::Identity()
则是一个4x4的单位矩阵。它可以用于表示任何线性变换,包括旋转、平移、缩放和剪切等。但是,它没有保证距离的不变性,也没有提供专门的接口来操作旋转和平移。
如果你需要表示和操作刚体变换(即旋转和平移),那么Eigen::Isometry3d
会是一个更好的选择。如果你需要表示更一般的线性变换,那么你应该使用Eigen::Matrix4d
。
Eigen::Isometry3d在使用时要进行初始化,初始化方式如下
错误方式:
Eigen::Isometry3d A;
A.Identity();
cout<<"A\n"<<A.matrix()<<endl;
Identity()初始化的结果 并不是一个4*4的单位矩阵;
正确方式:
Eigen::Isometry3d A= Eigen::Isometry3d::Identity();