欧拉角、四元数和旋转矩阵
来源:互联网 发布:毕业论文里的数据作假 编辑:程序博客网 时间:2024/05/17 01:34
旋转变换
旋转变换最为直观的表示方法是“轴-角”:绕着某一个过原点轴,旋转某一角度。
轴可以用一个单位长度的点
使用右手坐标系,拇指指向轴方向,四指方向即为旋转的方向。
一个旋转变换可以用用欧拉角、四元数或者旋转矩阵表示。以下讨论不同表示方法之间的关系,以及旋转变换的合成、取逆等操作。
旋转矩阵
旋转可以看做一种特殊的坐标变换,而坐标变换可以用用
旋转矩阵可以在不同坐标系之间进行变换,但不能进行“反演”,即不能在左手系和右手系之间进行变换。
旋转矩阵是正交矩阵,即
欧拉角的物理意义
任何一个旋转可以表示为依次绕着三个旋转轴旋三个角度的组合。这三个角度称为欧拉角。
三个轴可以指固定的世界坐标系轴,也可以指被旋转的物体坐标系的轴。三个旋转轴次序不同,会导致结果不同。
本文中提到的欧拉角指:绕着世界坐标系的x,y,z轴,依次旋转的结果。其取值范围如下:
欧拉角→ 旋转矩阵
单独绕一个轴旋转
如果依次绕x轴、y轴、z轴旋转,该变换的旋转矩阵为:
记三个轴欧拉角的正弦和余弦函数为
旋转矩阵→ 欧拉角
设旋转矩阵i行j列元素为
四元数的物理意义
设有一个通过原点
也记为
四元数→ 旋转矩阵
利用罗德里格旋转公式可以获得绕某过原点一轴
代入四元组的表示方法,可得:
旋转矩阵→ 四元数
根据旋转矩阵的表达式,利用三角函数性质,可以由旋转矩阵得到四元数:
开根号要求
某些情况下(例如
如果
如果
如果
变换的逆
使用欧拉角表示时,必须颠倒三个旋转轴的顺序,同时对旋转角度取反。
使用旋转矩阵表示时,求矩阵的逆即可:
使用四元组表示时,考虑其物理意义,对后三位取反即可:
向量的叉乘
接下去讨论之前,需要先复习向量的叉乘。
三维空间中的一个点可以表示为向量
两个向量
四元组作为一种向量,其叉乘涉及到虚数单位的乘法,遵循以下原则:
叉乘满足反交换律:
联想叉乘的物理意义:交换了
叉乘满足加法分配律:
特别要注意,叉乘不满足结合律:
四元数的叉乘
四元数既不是矢量也不是标量。可以看做一个标量
两个四元数
四元数叉乘不满足交换律、结合律。
变换的组合
使用欧拉角表示时,很难直接组合两个变换。
使用旋转矩阵表示时,依次做矩阵相乘即可:
使用四元组表示时,需要对两个四元组叉乘:
注意,先发生的变换要放在乘号右侧。
由于叉乘不满足结合律,当有一系列变化
使用四元数
首先把待旋转的点
对该点
利用matlab的syms功能(参看附录),可以得到对三维点
附录
以下代码推导对三维点
施加变换
clear;clc;close all;syms a1 a2 a3 a4 b1 b2 b3 b4syms q0 q1 q2 q3syms x y z% a: rotation, b: 3D vectora1 = q0;a2 = q1;a3 = q2;a4 = q3;b1 = 0;b2 = x;b3 = y;b4 = z;% c = a (*) bc1 = a1*b1-a2*b2-a3*b3-a4*b4;c2 = a1*b2+a2*b1+a3*b4-a4*b3;c3 = a1*b3-a2*b4+a3*b1+a4*b2;c4 = a1*b4+a2*b3-a3*b2+a4*b1;% d = conj(a)d1 = a1;d2 = -a2;d3 = -a3;d4 = -a4;% e = a (*) b (*) conj(a) = c (*) de1 = c1*d1-c2*d2-c3*d3-c4*d4;e2 = c1*d2+c2*d1+c3*d4-c4*d3;e3 = c1*d3-c2*d4+c3*d1+c4*d2;e4 = c1*d4+c2*d3-c3*d2+c4*d1;expand(e1)expand(e2)expand(e3)expand(e4)
- 欧拉角、四元数和旋转矩阵
- 四元数、欧拉角和旋转矩阵
- 四元数和旋转矩阵
- 四元数和旋转矩阵
- 四元数和旋转矩阵
- 旋转:矩阵,四元数和欧拉角向量
- 旋转:矩阵,四元数和欧拉角向量
- XNA旋转:矩阵,四元数和欧拉角向量 .
- 旋转矩阵 欧拉角 四元数
- unity3d四元数和旋转矩阵
- unity3d四元数和旋转矩阵
- unity3d四元数和旋转矩阵
- unity3d四元数和旋转矩阵
- unity3d四元数和旋转矩阵
- unity3d四元数和旋转矩阵
- Slam编程一 旋转向量、旋转矩阵,欧拉角、变换矩阵和四元数
- 三维旋转:旋转矩阵,欧拉角,四元数
- 三维旋转:旋转矩阵,欧拉角,四元数
- RecyclerView+PopupWindow 自定义弹框
- c#连接数据库-1
- 基本算法——第八单元 排序
- 第三方开源库:SlidingMenu-Master实现侧拉效果
- JBOSS:Java版本不正确而导致的JBoss无法正常启动
- 欧拉角、四元数和旋转矩阵
- 只用两变量实现两者数据的交换
- 手势
- [CQOI2015]任务查询系统 (可持久化treap)
- RMQ算法
- Master HA彻底解密
- jQuery6(获取元素练习,改变标签样式及内容)
- 使用pycharm时候,借用Anaconda3的编译器
- 面试笔试杂项积累-leetcode 116-120