在使用 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矩阵的最后一列。
- 变换矩阵:最终变换矩阵中,旋转变换首先应用,然后是平移变换。
当你将一个点应用到这个变换矩阵时,矩阵乘法的顺序决定了先旋转再平移。