欧拉角和旋转矩阵相互转换

欧拉角和旋转矩阵相互转换一 变换矩阵 F H 的 svd 分解或者旋转矩阵 平移矩阵求解 二 欧拉角和旋转矩阵可同样表示刚体在三维空间的旋转 下面分享这两者互相转换的方法和核心代码欧拉角转旋转矩阵欧拉角通过将刚体绕过原点的轴 i j k 旋转 分解成三步 如下图 蓝色是起始坐标系 而红色的是旋转之后的坐标系 如果将每一个角度用旋转矩阵表示如下 所以 容易得到 欧拉角转旋转矩阵如下 旋转矩阵转欧拉角将旋转矩阵表

目录

1.参考资料 

2.变换矩阵/F/H的svd分解或者旋转矩阵、平移矩阵求解

3. 欧拉角和旋转矩阵可同样表示刚体在三维空间的旋转,下面分享这两者互相转换的方法和核心代码


0. Eigen/四元数/欧拉角/旋转矩阵 相关系列文章
1. SLAM——之Eigen入门(矩阵运算及几何模块)
2. [SLAM——之Eigen函数库,一个相对复杂的EIgen使用实例]
3. [SLAM——Eigen函数库:矩阵块运算,block操作]
4. [欧拉角和旋转矩阵相互转换]
5. [四元数与三维向量相乘运算]
6. [四元数求导]












1.参考资料 

2.变换矩阵/F/H的svd分解或者旋转矩阵、平移矩阵求解

  • 欧拉角转旋转矩阵 
    欧拉角通过将刚体绕过原点的轴(i,j,k)旋转θ,分解成三步,如下图(蓝色是起始坐标系,而红色的是旋转之后的坐标系) ,12种方法的其中一种分解示意图!
    这里写图片描述 
    如果将每一个角度用旋转矩阵表示如下: 
    这里写图片描述 
    所以,容易得到,欧拉角转旋转矩阵如下: 










  • 欧拉角和旋转矩阵相互转换

  • 旋转矩阵转欧拉角 
    将旋转矩阵表示如下: 

  • 欧拉角和旋转矩阵相互转换 
    则可以如下表示欧拉角: 

  • 欧拉角和旋转矩阵相互转换

3. 欧拉角和旋转矩阵可同样表示刚体在三维空间的旋转,下面分享这两者互相转换的方法和核心代码

  • 欧拉角转旋转矩阵
/ 欧拉角计算对应的旋转矩阵 / Mat eulerAnglesToRotationMatrix(Vec3f &theta) {     // 计算旋转矩阵的X分量     Mat R_x = (Mat_               (3,3) <<                1,       0,              0,                0,       cos(theta[0]),   -sin(theta[0]),                0,       sin(theta[0]),   cos(theta[0])                );     // 计算旋转矩阵的Y分量     Mat R_y = (Mat_                 (3,3) <<                cos(theta[1]),    0,      sin(theta[1]),                0,               1,      0,                -sin(theta[1]),   0,      cos(theta[1])                );     // 计算旋转矩阵的Z分量     Mat R_z = (Mat_                   (3,3) <<                cos(theta[2]),    -sin(theta[2]),      0,                sin(theta[2]),    cos(theta[2]),       0,                0,               0,                  1);     // 合并      Mat R = R_z * R_y * R_x;     return R; }                        

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  • 旋转矩阵转欧拉角
/* 功能: 检查是否是旋转矩阵/ bool isRotationMatrix(Mat &R) {     Mat Rt;     transpose(R, Rt);     Mat shouldBeIdentity = Rt * R;     Mat I = Mat::eye(3,3, shouldBeIdentity.type());     return  norm(I, shouldBeIdentity) < 1e-6;     } / * 功能: 通过给定的旋转矩阵计算对应的欧拉角/ Vec3f rotationMatrixToEulerAngles(Mat &R) {     assert(isRotationMatrix(R));     float sy = sqrt(R.at             (0,0) * R.at               (0,0) +  R.at                 (1,0) * R.at                   (1,0) );     bool singular = sy < 1e-6; // If     float x, y, z;     if (!singular) {         x = atan2(R.at                     (2,1) , R.at                       (2,2));         y = atan2(-R.at                         (2,0), sy);         z = atan2(R.at                           (1,0), R.at                             (0,0));     } else {         x = atan2(-R.at                               (1,2), R.at                                 (1,1));         y = atan2(-R.at                                   (2,0), sy);         z = 0;     }     return Vec3f(x, y, z);    }                                                                                                                                          

程序运行结果展示:

欧拉角和旋转矩阵相互转换

参考 
1. 欧拉角详解

2. 欧拉角

暂做记录,后续补充

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214240.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:40
下一篇 2026年3月18日 下午4:40


相关推荐

  • gcd exgcd[通俗易懂]

    gcd exgcd[通俗易懂]#include#define_ios_base::sync_with_stdio(0);cin.tie(0);#defineINF0x3f3f3f3f#defineeps1e-5typedeflonglongLL;constdoublepi=acos(-1.0);constlonglongmod=25*1E8;usi

    2025年6月26日
    5
  • navicat ssh通道受限问题处理

    navicat ssh通道受限问题处理

    2021年10月19日
    39
  • 叉积和点积

    叉积和点积向量是由 n 个实数组成的一个 n 行 1 列 n 1 或一个 1 行 n 列 1 n 的有序数组 向量的点乘 也叫向量的内积 数量积 对两个向量执行点乘运算 就是对这两个向量对应位一一相乘之后求和的操作 点乘的结果是一个标量 点乘公式对于向量 a 和向量 b nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp a 和 b 的点积公式为

    2026年3月16日
    2
  • 豆包怎么给自己生成ai的帅照

    豆包怎么给自己生成ai的帅照

    2026年3月12日
    2
  • QT的基本知识「建议收藏」

    QT的基本知识「建议收藏」QT是一个跨平台应用程序和UI开发框架。具体的安装以及源文件的下载这里不详细介绍。要在QT界面上添加一个按钮,可以有两种方法:一个是直接拖放一个按钮即可;另一种则是通过程序来添加一种按钮。QT提供的信号和槽机制,可以让任意两个对象之间进行消息处理,其作用就是让一个对象产生的信号能够被另一个对象接受并处理。QT基本所有的对象都集成在QObject对象中,在这个对象中有一个静态函数connect…

    2022年5月17日
    39
  • 图像拼接——APAP算法[通俗易懂]

    图像拼接——APAP算法[通俗易懂]一、图像拼接技术1、基本介绍图像拼接是将同一场景的多个重叠图像拼接成较大的图像的一种方法,在医学成像、计算机视觉、卫星数据、军事目标自动识别等领域具有重要意义。图像拼接的输出是两个输入图像的并集。通常用到五个步骤:二、APAP算法1、…

    2026年2月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号