matlab练习程序(旋转矩阵、欧拉角、四元数互转)
欧拉角转旋转矩阵公式:

旋转矩阵转欧拉角公式:

旋转矩阵转四元数公式,其中1+r11+r22+r33>0:

四元数转旋转矩阵公式,q0^2+q1^2+q2^2+q3^2=1:

欧拉角转四元数公式:

四元数转欧拉角公式:

matlab代码如下:
clear all;
close all;
clc; %欧拉角
x = 0.5;
y = 0.6;
z = 0.7;
Ang1 = [x y z]; %欧拉角转旋转矩阵
Rx = [ ;
cos(x) -sin(x);
sin(x) cos(x)];
Ry = [cos(y) sin(y);
;
-sin(y) cos(y)];
Rz = [cos(z) -sin(z) ;
sin(z) cos(z) ;
];
R = Rz*Ry*Rx;
R1 = R; %旋转矩阵转欧拉角
x = atan2(R(,),R(,));
y = atan2(-R(,),sqrt(R(,)^+R(,)^));
z = atan2(R(,),R(,));
Ang2 = [x y z]; %旋转矩阵转四元数
t=sqrt(+R(,)+R(,)+R(,))/;
q=[t (R(,)-R(,))/(*t) (R(,)-R(,))/(*t) (R(,)-R(,))/(*t)];
Q1 = q; %四元数转旋转矩阵
R=[ *q().^-+*q()^ *(q()*q()-q()*q()) *(q()*q()+q()*q());
*(q()*q()+q()*q()) *q()^-+*q()^ *(q()*q()-q()*q());
*(q()*q()-q()*q()) *(q()*q()+q()*q()) *q()^-+*q()^];
R2 = R; %欧拉角转四元数
q = [cos(x/)*cos(y/)*cos(z/) + sin(x/)*sin(y/)*sin(z/) ...
sin(x/)*cos(y/)*cos(z/) - cos(x/)*sin(y/)*sin(z/) ...
cos(x/)*sin(y/)*cos(z/) + sin(x/)*cos(y/)*sin(z/) ...
cos(x/)*cos(y/)*sin(z/) - sin(x/)*sin(y/)*cos(z/)];
Q2 = q; %四元数转欧拉角
x = atan2(*(q()*q()+q()*q()), - *(q()^+q()^));
y = asin(*(q()*q() - q()*q()));
z = atan2(*(q()*q()+q()*q()), - *(q()^+q()^));
Ang3 = [x y z]; Ang1
Ang2
Ang3 R1
R2 Q1
Q2
参考:
https://blog.csdn.net/lql0716/article/details/72597719
https://www.cnblogs.com/21207-iHome/p/6894128.html
matlab练习程序(旋转矩阵、欧拉角、四元数互转)的更多相关文章
- matlab练习程序(求向量间的旋转矩阵与四元数)
问题是这样,如果我们知道两个向量v1和v2,计算从v1转到v2的旋转矩阵和四元数,由于旋转矩阵和四元数可以互转,所以我们先计算四元数. 我们可以认为v1绕着向量u旋转θ角度到v2,u垂直于v1-v2 ...
- matlab练习程序(SUSAN检测)
matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...
- (转)matlab练习程序(HOG方向梯度直方图)
matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...
- matlab练习程序(对应点集配准的四元数法)
这个算是ICP算法中的一个关键步骤,单独拿出来看一下. 算法流程如下: 1.首先得到同名点集P和X. 2.计算P和X的均值up和ux. 3.由P和X构造协方差矩阵sigma. 4.由协方差矩阵sigm ...
- matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读
静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...
- matlab练习程序(透视投影,把lena贴到billboard上)
本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下.他用的是opencv,我这里用的是matlab. 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将 ...
- matlab练习程序(多圆交点)
最近总是对计算几何方面的程序比较感兴趣. 多圆求交点,要先对圆两两求交点. 有交点的圆分为相切圆和相交圆. 相切圆求法: 1.根据两圆心求直线 2.求公共弦直线方程 3.求两直线交点即两圆切点. 相交 ...
- matlab练习程序(矩形变换为单连通形状)
变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...
- matlab练习程序(渲染三原色)
这里我用的空间是x向右为正,y向下为正,z向屏幕里面为正.相当于标准右手系绕x轴旋转了180度. 将三个点光源放在 r = [0.3,0,0.5];g = [0.3,-0.5*cos(pi/6),-0 ...
随机推荐
- update-rc.d: error: XXX Default-Start contains no runlevels, aborting.
root@hm-saas-db:/etc/init.d# update-rc.d confluence disable update-rc.d: error: confluence Default-S ...
- xcodebuild构建时报错unknown error -1=ffffffffffffffff Command /bin/sh failed with exit code 1
CI今日构建时报出如下错误: /Users/xxx/Library/Developer/Xcode/DerivedData/Snowball-ebllohyukujrncbaldsfojfjxwep/ ...
- .Net程序员学用Oracle系列(19):导出、导入(备份、还原)
1.传统的导出/导入工具 1.1.EXP 命令详解 1.2.IMP 命令详解 1.3.EXP/IMP 使用技巧 2.新的导出/导入工具 2.1.EXPDP/IMPDP 参数说明 2.2.EXPDP/I ...
- 【详解】Tomcat是如何监控并删除超时Session的?
前言 偶然发现Tomcat会话时间的半小时,并不是说会话创建后,只有半小时的有效使用时间,而是说会话空闲半小时后,会被删除.索性就翻了一下源码.做了一番整理. 注:空闲时间,指的是同一个会话两次请求之 ...
- Java 容器源码分析之 Map
ava.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map.List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建 ...
- Spring中Bean的生命周期及其扩展点
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6106456.html Spring中Bean的管理是其最基本的功能,根据下面的图来了解Spr ...
- IPv6笔记
单播地址包含的几种类型:1.AGUA地址:2000::到3FFF:FFFF:FFFF:FFFF:FFFF..... 一个接口可以拥有若干个AGUA地址2.Link-Local 地址:FE80::/10 ...
- golang使用chrome headless获取网页内容
如今动态渲染的页面越来越多,爬虫们或多或少都需要用到headless browser来渲染待爬取的页面. 而最近广泛使用的headless browser解决方案PhantomJS已经宣布不再继续维护 ...
- vb.net 使用NPO自定義格式
'導入命名空間 Imports System.IOImports NPOI.HSSF.UserModelImports NPOI.HPSFImports NPOI.POIFS.FileSystem P ...
- 【Spring】DispatcherServlet的启动和初始化
使用过SpringMVC的都知道DispatcherServlet,下面介绍下该Servlet的启动与初始化.作为Servlet,DispatcherServlet的启动与Serlvet的启动过程是相 ...