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

欧拉角和旋转矩阵相互转换一 变换矩阵 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


相关推荐

  • 人何以堪

    人何以堪

    2021年8月12日
    66
  • MySQL索引实现原理分析

    目前大部分数据库系统及文件系统都采用B-Tree(B树)或其变种B+Tree(B+树)作为索引结构。B+Tree是数据库系统实现索引的首选数据结构。在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。MyISAM索引实现MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的…

    2022年4月7日
    52
  • mybatis返回值为map类型时怎么处理_构造函数不能有返回类型

    mybatis返回值为map类型时怎么处理_构造函数不能有返回类型最有用到mybatis返回一个map结果集,然后就针对性的在网上找了一些相关大牛的总结:1.mybatis返回map结果集-红尘中人·杨哥-博客园2.MyBatis返回Map|码农网然后经过自己的测试终于可以应用实际业务中1、如果你确定返回的数据只有一条,你可以这样整xml中:<selectid=”searchncomedateByInvestID”resultMap=”java.util.HashMap”>selectt1.invest.

    2022年10月4日
    4
  • idea maven 快捷键_idea快捷键大全最新

    idea maven 快捷键_idea快捷键大全最新IdeaVimo|i<–当前光标–>aI<—————|—————————->AO上k下j左h右lw(小写)->词组正向跳转到下一个单词开始(以空格和符号作为分隔)W(大写)->词…

    2026年4月17日
    6
  • 数学建模之排队论模型及代码

    数学建模之排队论模型及代码数学建模之排队论模型及代码本人新手第一次搞了个博客 以前都是看别人写的博客 汲取别人的知识 今天自己也写一下自己的博客 分享一下自己的收获 希望对你有用 言归正传 排队论是数学建模中很常见的数学模型 但因其涉及到专业知识 所以对于非理工专业的人来说 还是很有困难的 下面讲解一下 模型一般步骤 第一步 数据的准备即确定客户的来源符合什么分布 确定服务时间符合什么分布 比如大部分游客到达时间符

    2026年3月17日
    2
  • a4如何打印双面小册子_a4如何排版打印双面小册子?

    a4如何打印双面小册子_a4如何排版打印双面小册子?我来告诉你 你手上这种册子的装订方式是骑马订 这种装订方式在 adobepdf 里面用拼版插件拼版非常快 不过非专业人士都不会用 有的打印机的打印驱动页面里面也有小册子打印的方式 可以直接打印出来 重点来了 以上的方法你都用不了的话 就只能用最费事的方法了 在 word 或者 wps 里面一张一张的排 1 页面数 骑马订册子的页面数必须是 4 的倍数 不够的话就得加空白页 空白页最好加在封二或者封三 封面

    2026年3月20日
    1

发表回复

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

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