3维旋转矩阵推导与助记
旋转矩阵的应用范围比较广,是姿态变换,坐标变换等的基础。本篇先介绍旋转矩阵的推导过程与助记方法。
旋转矩阵的旋转其实包含两种意思,一是在同一个坐标系下,向量的旋转;二是坐标系的旋转,使得同一向量在不同的坐标系下有不同的坐标。
1 向量旋转
首先讨论二维平面坐标下的旋转,然后引申至三维。
1.1 平面二维旋转
如下图,XY坐标系中,向量OP旋转β角度到了OP’的位置:
根据三角函数关系,可以列出向量OP与OP’的坐标表示形式:
对比上面个两个式子,将第2个式子展开:
用矩阵形式重新表示为:
这就是二维旋转的基本形式,中间的矩阵即二维旋转的旋转矩阵,坐标中的某一向量左乘该矩阵后,即得到这个向量旋转β角后的坐标。
1.2 三维旋转
三维旋转可借助二维旋转来理解,由于三维空间中可以任意轴旋转,为方便分析与使用,只考虑绕X、Y、Z轴的旋转。
绕Z轴
参照上面的图,添加一个Z轴,则上面的二维旋转实际上就是绕Z轴的三维旋转
照搬上面的推导公式,并添加Z坐标的变换关系(实际是没有变),然后改写成矩阵形式,红色方框即为绕Z轴的旋转矩阵。
绕Y轴
绕Y轴旋转同理,这里直接改变坐标轴的符号表示,注意坐标顺序要符合右手系,我这里用颜色区分了不同的轴。最终的矩阵形式要进一步改写成XYZ的顺序。红色方框即为绕Y轴的旋转矩阵。
绕X轴
参照绕Y轴的推导,可以得到绕X轴的结果。红色方框即为绕X轴的旋转矩阵。
1.3 助记
对于单位矩阵,绕哪个轴旋转,哪一列不用变,然后将二维旋转矩阵替换对应的4个位置,注意,绕Y的旋转矩阵看起来与另外两个不同,它的-sinβ是在左下!
1.4 注意事项
反向旋转
如果是反向旋转一个角度,推导过程类似:
最终得到的旋转矩阵其实是正向旋转矩阵的逆矩阵,由于这个矩阵是正交阵,所以逆矩阵就是转置矩阵。
书写形式
上面的向量的坐标都是按照列的形式书写,如果是换成行的形式表示,则旋转的矩阵形式被转置了一下,同时矩阵在行向量的右边进行相乘。
2 坐标系旋转
2.1 平面二维旋转
如下图,xy坐标系中,有一向量OP,其坐标可表示为(x,y),该向量与X轴夹角为α。然后,坐标系绕原点逆时旋转了β角度,形成新的坐标系x’y’,此时OP在新的坐标系中的坐标表示为(x,y),根据几何关系,可以得到如下推导,最终得到绿色虚框的旋转矩阵。
对比上面的旋转矩阵,可以发现:这里坐标系旋转的旋转矩阵与上面向量旋转的旋转矩阵正好是转置的关系(实际上是逆矩阵,因为正交阵的逆矩阵与转置矩阵相同),因为这两种旋转本质上是相对运动,互为逆过程。
2.2 三维旋转
绕Z轴
绕Y轴
绕X轴
3维旋转矩阵推导与助记相关推荐
- 方波与sinc函数之间的最全傅里叶变换关系_助记_有图有推导
方波与sinc函数的最全傅里叶变换对_助记_有图有推导 文章目录 方波与sinc函数的最全傅里叶变换对\_助记\_有图有推导 1.连续时间周期信号傅里叶变化下的方波与sinc 2.离散时间周期信号傅里 ...
- 2维旋转矩阵的推导方式
1.向量空间推导 先复习向量空间的定义 向量空间的定义是:设V为n维向量的集合,若集合V非空,且集合V对于向量的加法及数乘两个运算封闭,那么称集合V为向量空间. 也就是说向量空间=集合+运算+运算对集 ...
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符
说明,本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类 只要认真阅读本文必然能够对字节码指令集有所了解 如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范 指令简介 计算机 ...
- 常见 Java 字节码 指令 助记符
转自: 常见java字节码 有时候为了能理解JVM对程序所做的优化等,需要查看程序的字节码,因此知道了解一些常见的指令集很重要! 指令码 助记符 说明 0x00 nop 什么都不做 0x01 acon ...
- 非对称加密, 助记词, PIN, WIF
一钱包 1.1非对称加密, 助记词, PIN, WIF, 地址 1.1.1 非对称加密算法 非对称加密算法, 加密与解密使用不同的KEY, 我们分别称为私钥与公钥,其中可以通过私钥生成公钥 在比特币中 ...
- JVM指令集(指令码、助记符、功能描述)(转)
JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式: aconst_null 功能描述: null进栈. 指令 ...
- 「助记词密盒」用户协议与隐私政策
用户协议: 本协议是您(以下简称"用户")与 助记词密盒APP(以下简称"APP")之间就助记词密盒提供的服务等相关事宜所订立的契约,对用户与助记词密盒具有法律 ...
- PHP使用web3还原助记词
PHP使用web3还原助记词 function generateAddress( $mnemonic = '' ){global $eth ;$data = $eth->generateAddr ...
- 第17篇 账户管理(助记词)
本文环境: 操作系统:windows 64: node版本:v10.14.0: 参考文档:https://github.com/guoshijiang/blockchain-wallet/tree/m ...
最新文章
- 深入理解Kinect for Windows开发
- C#阶乘类,可以精确计算大数的阶乘,10000的阶乘只要1.3秒左右
- Go 语言编程 — 并发 — Channel 通道
- Hadoop 2.0(YARN/HDFS)学习资料汇总
- 节点+Executor+Core+Task+Partition+RDD+job+DAG+stage+action算子之间的数量关系+两种并行度的区别
- Silverlight 4 Beta正式发布
- Windows Communication Foundation环境安装篇
- mysql那些事(6) WHERE条件 字符串的引号
- 归纳一下:C#线程同步的几种方法
- 百度网盘最大的竞争对手来了!阿里云盘正式公测
- jquery获取json对象中的key小技巧
- 深入设计模式(二)——单例模式(Singleton Pattern)
- Java开发 | 数据结构和算法之——递归算法
- mysql完整的建表语句
- C++:关于类以及h/cpp文件的一些实用知识
- tar命令下的--exclude
- 程序员计算机的b怎么换算,在计算机中,一个机器字是由几b组成的?
- CFGym - 101086M. ACPC Headquarters : AASTMT (Stairway to Heaven) - 字符串处理
- arcgis如何打开tif_详解如何使用ArcGIS生成高程点
- 运用JAVA基础阶段知识,模拟双色球机选抽奖过程