在使用 Eigen::Matrix4f
时,默认情况下是先进行旋转再进行平移。这是因为矩阵的构造顺序遵循标准的变换规则:
- 旋转:旋转矩阵是一个3x3的矩阵,用于表示旋转变换。
- 平移:平移是通过4x4矩阵的最后一列实现的,其中前三个元素代表平移向量。
例如,在组合变换时,如果你先应用旋转,然后应用平移,可以这样构造矩阵:
#include <iostream> #include <Eigen/Dense> int main() { Eigen::Matrix4f transform = Eigen::Matrix4f::Identity(); // 定义旋转矩阵(绕Z轴旋转45度) Eigen::Matrix3f rotation; float angle = M_PI / 4; // 45度 rotation << cos(angle), -sin(angle), 0, sin(angle), cos(angle), 0, 0, 0, 1; // 将旋转矩阵放入4x4矩阵的左上角 transform.block<3,3>(0,0) = rotation; // 定义平移向量 Eigen::Vector3f translation(1, 2, 3); // 将平移向量设置到4x4矩阵的最后一列 transform(0, 3) = translation(0); transform(1, 3) = translation(1); transform(2, 3) = translation(2); // 输出变换矩阵 std::cout << "Transform Matrix:\n" << transform << std::endl; return 0; }
解释:
- 旋转矩阵:先定义一个3x3旋转矩阵并将其设置到4x4矩阵的左上角。
- 平移向量:定义一个平移向量,并将其放置到4x4矩阵的最后一列。
- 变换矩阵:最终变换矩阵中,旋转变换首先应用,然后是平移变换。
当你将一个点应用到这个变换矩阵时,矩阵乘法的顺序决定了先旋转再平移。