摘要

旋转矩阵更容易理解与记忆的推导,从2D到3D


声明:本文推导适用于右手坐标系。
旋转角度说明:本文说的绕x轴旋转θ\thetaθ度指的是顺着x轴负方向看过去,逆时针旋转θ\thetaθ度。若想获得顺时针旋转的旋转矩阵,只需要把θ\thetaθ改为−θ-\theta−θ即可。(个人觉得3D空间中要想准确描述旋转而不造成混淆,至少要说明三点:旋转轴,朝向,在该朝向下是顺时针还是逆时针旋转。)

2D旋转矩阵

2D旋转矩阵推导公式网上都有,不再赘述。参考这里,有

由上述推导可得2D空间中,从X轴向Y轴旋转θ\thetaθ度的旋转矩阵为:
[X′Y′]=[cosθ−sinθsinθcosθ][XY]\begin{bmatrix} X' \\ Y' \end{bmatrix}= \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} \begin{bmatrix} X \\ Y \end{bmatrix} [X′Y′​]=[cosθsinθ​−sinθcosθ​][XY​]
注意:上述公式相当于3D空间中,绕Z轴旋转θ\thetaθ度的公式,即顺着Z轴负方向看过去逆时针旋转θ\thetaθ度。也相当于把X轴旋转向Y轴的公式。
后面的3D旋转矩阵全都以此为基础变形,无非是移动一下元素位置。

3D旋转矩阵

绕Z轴旋转θ\thetaθ度的公式

由2D旋转矩阵直接可得,不作推导:
[X′Y′Z′]=[cosθ−sinθ0sinθcosθ0001][XYZ]\begin{bmatrix} X' \\ Y' \\ Z' \end{bmatrix}= \begin{bmatrix} cos\theta & -sin\theta & 0 \\ sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} ⎣⎡​X′Y′Z′​⎦⎤​=⎣⎡​cosθsinθ0​−sinθcosθ0​001​⎦⎤​⎣⎡​XYZ​⎦⎤​

绕Y轴旋转θ\thetaθ度的公式

可根据2D旋转矩阵直接变形得到,过程如下:
根据我们的规定,绕Y轴旋转表示逆着Y轴正方向逆时针旋转,根据右手坐标系可知,相当于从Z轴旋转向X轴,根据2D旋转矩阵,可得
[Z′X′]=[cosθ−sinθsinθcosθ][ZX]\begin{bmatrix} Z' \\ X' \end{bmatrix}= \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} \begin{bmatrix} Z \\ X \end{bmatrix} [Z′X′​]=[cosθsinθ​−sinθcosθ​][ZX​]
扩展到3D旋转矩阵,为
[Z′X′Y′]=[cosθ−sinθ0sinθcosθ0001][ZXY]\begin{bmatrix} Z' \\ X' \\ Y' \end{bmatrix}= \begin{bmatrix} cos\theta & -sin\theta & 0 \\ sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} Z \\ X \\ Y \end{bmatrix} ⎣⎡​Z′X′Y′​⎦⎤​=⎣⎡​cosθsinθ0​−sinθcosθ0​001​⎦⎤​⎣⎡​ZXY​⎦⎤​
调整一下右边坐标顺序,公式变形为
[Z′X′Y′]=[−sinθ0cosθcosθ0sinθ010][XYZ]\begin{bmatrix} Z' \\ X' \\ Y' \end{bmatrix}= \begin{bmatrix} -sin\theta & 0 & cos\theta \\ cos\theta & 0 & sin\theta \\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} ⎣⎡​Z′X′Y′​⎦⎤​=⎣⎡​−sinθcosθ0​001​cosθsinθ0​⎦⎤​⎣⎡​XYZ​⎦⎤​
再调整一下左边坐标顺序,公式变形为
[X′Y′Z′]=[cosθ0sinθ010−sinθ0cosθ][XYZ]\begin{bmatrix} X' \\ Y' \\ Z' \end{bmatrix}= \begin{bmatrix} cos\theta & 0 & sin\theta \\ 0 & 1 & 0 \\ -sin\theta & 0 & cos\theta \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} ⎣⎡​X′Y′Z′​⎦⎤​=⎣⎡​cosθ0−sinθ​010​sinθ0cosθ​⎦⎤​⎣⎡​XYZ​⎦⎤​
这就是我们所要求的绕Y轴旋转θ\thetaθ度的公式。

绕X轴旋转θ\thetaθ度的公式

同理,也可从2D旋转矩阵直接变形得到
[X′Y′Z′]=[1000cosθ−sinθ0sinθcosθ][XYZ]\begin{bmatrix} X' \\ Y' \\ Z' \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0 \\ 0 & cos\theta & -sin\theta \\ 0 & sin\theta & cos\theta \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} ⎣⎡​X′Y′Z′​⎦⎤​=⎣⎡​100​0cosθsinθ​0−sinθcosθ​⎦⎤​⎣⎡​XYZ​⎦⎤​

相关/参考链接

旋转矩阵公式推导
旋转矩阵推导 | 推荐读这个,首先它清楚的定义了顺时针旋转到底是怎么转,只有定义清楚了,旋转才不会混淆。

旋转矩阵更容易理解与记忆的推导,从2D到3D相关推荐

  1. 理解长短期记忆(LSTM) 神经网络

    声明:本文翻译自colah的博客,原文地址:Understanding LSTM NETWORK 递归神经网络 人类并不是从混沌状态开始他们的思考.就像你读这篇文章时,你是建立在你之前对文字的理解上. ...

  2. 《屏幕上的聪明决策》:4星。人类在手机/电脑上做选择的心理学研究的综述。不流畅的文本有助于理解和记忆,淘汰赛制可以有效降低选择后懊悔。...

    本书是人类在手机/电脑上做选择的心理学研究的综述,比较可信,有许多有趣的事实与结论.比较重要的结论有这么几个: 1:人类对网站.文章的判断很大程度上以来瞬间感知和审美: 2:不流畅的文本有助于理解和记 ...

  3. 金字塔结构:大脑条理清晰地进行理解与记忆

    12.在字里行间呈现金字塔 做到条理清晰需要两个步骤: 首先决定要说明的思想或要证明的论点 然后用文字表现 构建金字塔结构,并重新检查各组的思想观点之后,就确切知道了自己想要说明的思想或论点 以及说明 ...

  4. 争对让望对思野葛对山栀注解_笠翁对韵故事性理解与记忆之四支第四段不要着急成功...

    写在前面: <笠翁对韵>,里面词藻丰富.优美,曲故众多,文章节奏鲜明,韵律和谐,读起来有一种音乐美,朗朗上口,对于遣词造句.写作有很大的帮助,所以其也是小学要背诵的一个重要的课外读物. 但 ...

  5. 争对让望对思野葛对山栀注解_笠翁对韵四支第四段故事性理解与记忆之文人要改变志向去求得成功吗?...

    写在前面: <笠翁对韵>,里面词藻丰富.优美,曲故众多,文章节奏鲜明,韵律和谐,读起来有一种音乐美,朗朗上口,对于遣词造句.写作有很大的帮助,所以其也是小学要背诵的一个重要的课外读物. 但 ...

  6. 化腐朽为神奇:推荐一个让算法动起来更好理解的学习项目!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 今天给大家推荐一个化腐朽为神器的开源项目:Algorit ...

  7. 帮助你更好理解javascript中easing功能的网站 - Easings.net

    日期:2012-10-17  来源:GBin1.com 如果你开发过jQuery的动画效果的话,肯定接触过一个jQuery插件:jquery.easing plugin,这个插件可以帮助你生成不同类型 ...

  8. 云栖专辑 | 阿里开发者们的第3个感悟:从身边开源开始学习,用过才能更好理解代码

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

  9. 《CCIE路由和交换认证考试指南(第5版) (第2卷)》——1.6节理解与记忆

    本节书摘来自异步社区<CCIE路由和交换认证考试指南(第5版) (第2卷)>一书中的第1章,第1.6节理解与记忆,作者 [美]那比克 科查理安(Narbik Kocharians) , 特 ...

最新文章

  1. JUnit4用法详解
  2. JavaScript入门第一天,js教程,js变量, 数据类型,数据转换,隐式转换
  3. 2018年10月17日普级B组【模拟赛】
  4. 语言4位bcd码怎么加加_S7300400如何使用SCL语言调用SFC1(READ_CLK)读取日期和时间?...
  5. dtmf信号系统的matlab仿真,dtmf信号系统的matlab仿真毕业设计
  6. 你对jstl了解多少----JSTL标签之函数(慎用)
  7. 【LeetCode 剑指offer刷题】发散思维题2:43 n个骰子的点数
  8. 11.17牛客练习赛31 ABC-----未完
  9. Halcon常用图像预处理算子总结
  10. matlab寻找频谱峰值,matlab – 从数据中获取FFT峰值
  11. 深度学习 | 训练及优化方法
  12. Webstorm使用解决ESlint问题合集
  13. ChatGPT:微软人工智能Office和电邮即将登场...
  14. Blender Rigify版Walker绑定下载
  15. TIOBE12月编程语言排行榜出炉!Java第一,有人要失业?
  16. 前端开发:如何正确地跨端?
  17. 【转】经典论文翻译导读之《A Bloat-Aware Design for Big Data Applications》
  18. 电子元件行业介绍及分析——ERP解决方案
  19. FTPClient.listFiles(filePath)获取文件数量为空
  20. Windows下的Autorun程序

热门文章

  1. Android应用构建:3:Android Studio 3.5.3: apk文件构建与验证
  2. 第二章:小朱笔记hadoop之源码分析-脚本分析
  3. notebook pip install 只有星号_只有给淘宝店铺精准打标,才能“快速获得优质流量”...
  4. 博图使用仿真,人机界面与PLC建立连接,出现连接中断问题,连接不上的问题(问题记录)
  5. Android webview处理404 500 断网 timeout页面的问题(by 星空武哥)
  6. 循环语句 for while
  7. GBase 8s V8.9 安全管理器 用户手册-1
  8. Excel2010多开独立窗口
  9. EXCEL中如何按字体做筛选
  10. Springboot输出PDF文件