Eigen::Matrix4f 是先旋转还是先平移的顺序

简介: Eigen::Matrix4f 是先旋转还是先平移的顺序

在使用 Eigen::Matrix4f 时,默认情况下是先进行旋转再进行平移。这是因为矩阵的构造顺序遵循标准的变换规则:

  1. 旋转:旋转矩阵是一个3x3的矩阵,用于表示旋转变换。
  2. 平移:平移是通过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;
}


解释:

  1. 旋转矩阵:先定义一个3x3旋转矩阵并将其设置到4x4矩阵的左上角。
  2. 平移向量:定义一个平移向量,并将其放置到4x4矩阵的最后一列。
  3. 变换矩阵:最终变换矩阵中,旋转变换首先应用,然后是平移变换。


当你将一个点应用到这个变换矩阵时,矩阵乘法的顺序决定了先旋转再平移。

目录
相关文章
|
5月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
447 0
|
5月前
|
C++
C++ PCL 计算多个RT矩阵变换后的变换矩阵
C++ PCL 计算多个RT矩阵变换后的变换矩阵
63 0
vector打印锯齿矩阵
vector打印锯齿矩阵
|
8月前
|
算法
算法题—顺时针打印矩阵
算法题—顺时针打印矩阵
59 0
|
计算机视觉
OpenCV-矩阵变形reshape
OpenCV-矩阵变形reshape
192 0
|
计算机视觉
OpenCV-向上采样cv::pyrUp&&向下采样cv::pyrDown
OpenCV-向上采样cv::pyrUp&&向下采样cv::pyrDown
|
计算机视觉
OpenCV-最小包围旋转矩形边框cv::minAreaRect
OpenCV-最小包围旋转矩形边框cv::minAreaRect
230 0
|
算法 程序员 C语言
|
存储 API 计算机视觉
OpenCV 矩阵的掩膜操作
OpenCV 矩阵的掩膜操作
164 0
OpenCV 矩阵的掩膜操作