求三维坐标系的旋转矩阵通常需要求分别沿3个坐标轴的二维坐标系下的旋转矩阵,二维坐标系下的旋转矩阵的推导过程通常以某一点逆时针旋转 θ \theta θ角度进行推理。以下将通过此例来详细讲解二维坐标系下的旋转矩阵推导过程,并进一步给出其他方式的旋转矩阵。

一、二维坐标中点的旋转变换

点的旋转矩阵(逆时针旋转)

已知点 P ( x , y ) P(x, y) P(x,y),将该点以逆时针方向旋转 θ \theta θ角度后得到点 P ′ ( x ′ , y ′ ) P^{\prime}(x^{\prime}, y^{\prime}) P′(x′,y′),如下图所示。求由点 P P P到点 P ′ P^{\prime} P′的旋转矩阵。

  • 设半径为 r r r,由图可以分别得到以下三角公式:

    • 对于点 P ( x , y ) P(x, y) P(x,y)
      x = r cos ⁡ α y = r sin ⁡ α (1) \begin{aligned} & x=r \cos \alpha \\ & y=r \sin \alpha \end{aligned} \tag{1} ​x=rcosαy=rsinα​(1)
    • 对于点 P ′ ( x ′ , y ′ ) P^{\prime}(x^{\prime}, y^{\prime}) P′(x′,y′)
      x ′ = r cos ⁡ ( α + θ ) y ′ = r sin ⁡ ( α + θ ) (2) \begin{aligned} & x^{\prime}=r \cos (\alpha+\theta) \\ & y^{\prime}=r \sin (\alpha+\theta) \end{aligned} \tag{2} ​x′=rcos(α+θ)y′=rsin(α+θ)​(2)
  • 根据两角和的正弦与余弦公式:
    sin ⁡ ( α + θ ) = sin ⁡ α cos ⁡ θ + cos ⁡ α sin ⁡ θ cos ⁡ ( α + θ ) = cos ⁡ α cos ⁡ θ − sin ⁡ α sin ⁡ θ (3) \begin{aligned} & \sin (\alpha+\theta)=\sin \alpha \cos \theta+\cos \alpha \sin \theta \\ & \cos (\alpha+\theta)=\cos \alpha \cos \theta-\sin \alpha \sin \theta \end{aligned} \tag{3} ​sin(α+θ)=sinαcosθ+cosαsinθcos(α+θ)=cosαcosθ−sinαsinθ​(3)

  • 将公式(3)代入公式(2),可得到:
    x ′ = r cos ⁡ α cos ⁡ θ − r sin ⁡ α sin ⁡ θ y ′ = r sin ⁡ α cos ⁡ θ + r cos ⁡ α sin ⁡ θ (4) \begin{aligned} & x^{\prime} =r \cos \alpha \cos \theta-r \sin \alpha \sin \theta \\ & y^{\prime} =r \sin \alpha \cos \theta+r \cos \alpha \sin \theta \\ \end{aligned} \tag{4} ​x′=rcosαcosθ−rsinαsinθy′=rsinαcosθ+rcosαsinθ​(4)

  • 将公式(1)代入公式(4),化简掉 α \alpha α,可得到 ( x ′ , y ′ ) (x^{\prime}, y^{\prime}) (x′,y′)与 ( x , y ) (x, y) (x,y)的关系,即:
    x ′ = x cos ⁡ θ − y sin ⁡ θ y ′ = y cos ⁡ θ + x sin ⁡ θ (5) \begin{aligned} & x^{\prime} =x \cos \theta-y \sin \theta \\ & y^{\prime} =y \cos \theta+x \sin \theta \\ \end{aligned} \tag{5} ​x′=xcosθ−ysinθy′=ycosθ+xsinθ​(5)

  • 整理公式(5)可得到旋转矩阵公式:
    x ′ = cos ⁡ θ ⋅ x − sin ⁡ θ ⋅ y y ′ = sin ⁡ θ ⋅ x + cos ⁡ θ ⋅ y ⇒ [ x ′ y ′ ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ x y ] (6) \begin{aligned} x^{\prime}&=\cos \theta \cdot x-\sin \theta \cdot y \\ y^{\prime}&=\sin \theta \cdot x+\cos \theta \cdot y \\ \Rightarrow \left[\begin{array}{l} x^{\prime} \\ y^{\prime}\end{array}\right] &=\left[\begin{array}{cc}\cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right] \left[\begin{array}{l} x \\ y \end{array}\right] \end{aligned} \tag{6} x′y′⇒[x′y′​]​=cosθ⋅x−sinθ⋅y=sinθ⋅x+cosθ⋅y=[cosθsinθ​−sinθcosθ​][xy​]​(6)

  • 因此二维坐标系下逆时针旋转矩阵 R R R为:
    R = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] R = \left[\begin{array}{cc}\cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right] R=[cosθsinθ​−sinθcosθ​]

点的旋转矩阵(顺时针旋转)

已知点 P ′ ( x ′ , y ′ ) P^{\prime}(x^{\prime}, y^{\prime}) P′(x′,y′),将该点以顺时针方向旋转 θ \theta θ角度后得到点 P ( x , y ) P(x, y) P(x,y),求 P P P。

1、利用求逆矩阵的方式

  • 二阶矩阵的逆的求法为:主对角元素换位置,次对角元素变符号,再乘上系数1/(ad-bc),由于旋转矩阵 R R R的ad-bc=1,因此 R R R的逆矩阵 R ′ R^{\prime} R′为:
    R ′ = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] R^{\prime} = \left[\begin{array}{cc}\cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{array}\right] R′=[cosθ−sinθ​sinθcosθ​]
  • 因此旋转公式为:
    [ x y ] = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] [ x ′ y ′ ] \left[\begin{array}{l} x \\ y \end{array}\right] = \left[\begin{array}{cc}\cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{array}\right] \left[\begin{array}{l} x^{\prime} \\ y^{\prime}\end{array}\right] [xy​]=[cosθ−sinθ​sinθcosθ​][x′y′​]

2、利用几何知识推导

将 P ′ P^{\prime} P′顺时针旋转 θ \theta θ角度到 P P P,相当于逆时针旋转 ( 2 π − θ ) (2 \pi-\theta) (2π−θ),由于三角函数的周期为 2 π 2 \pi 2π,因此相当于旋转 − θ -\theta −θ角度。

  • 将 − θ -\theta −θ代入到公式(6),得到:
    x = cos ⁡ ( − θ ) ⋅ x ′ − sin ⁡ ( − θ ) ⋅ y ′ = cos ⁡ θ ⋅ x ′ + sin ⁡ θ ⋅ y ′ y = sin ⁡ ( − θ ) ⋅ x ′ + cos ⁡ ( − θ ) ⋅ y ′ = − sin ⁡ θ ⋅ x ′ + cos ⁡ θ ⋅ y ′ \begin{aligned} x & =\cos (-\theta) \cdot x^{\prime}-\sin (-\theta) \cdot y^{\prime} \\ & =\cos \theta \cdot x^{\prime}+\sin \theta \cdot y^{\prime} \\ y & =\sin (-\theta) \cdot x^{\prime}+\cos (-\theta) \cdot y^{\prime} \\ & =-\sin \theta \cdot x^{\prime}+\cos \theta \cdot y^{\prime} \end{aligned} xy​=cos(−θ)⋅x′−sin(−θ)⋅y′=cosθ⋅x′+sinθ⋅y′=sin(−θ)⋅x′+cos(−θ)⋅y′=−sinθ⋅x′+cosθ⋅y′​
  • 整理上述公式可得到顺时针时的旋转矩阵公式:
    x = cos ⁡ θ ⋅ x ′ + sin ⁡ θ ⋅ y ′ y = − sin ⁡ θ ⋅ x ′ + cos ⁡ θ ⋅ y ′ ⇒ [ x y ] = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] [ x ′ y ′ ] \begin{aligned} x&=\cos \theta \cdot x^{\prime}+\sin \theta \cdot y^{\prime} \\ y&=-\sin \theta \cdot x^{\prime}+\cos \theta \cdot y^{\prime} \\ \Rightarrow \left[\begin{array}{l} x \\ y \end{array}\right] &= \left[\begin{array}{cc}\cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{array}\right] \left[\begin{array}{l} x^{\prime} \\ y^{\prime}\end{array}\right] \end{aligned} xy⇒[xy​]​=cosθ⋅x′+sinθ⋅y′=−sinθ⋅x′+cosθ⋅y′=[cosθ−sinθ​sinθcosθ​][x′y′​]​

二、二维坐标系的旋转变换

二维坐标系 XOY \text{XOY} XOY中有一点 P ( x , y ) P(x, y) P(x,y),将坐标系 XOY \text{XOY} XOY逆时针旋转 θ \theta θ角度后得到新坐标系 X ′ O ′ Y ′ \text{X}^{\prime}\text{O}^{\prime}\text{Y}^{\prime} X′O′Y′,求点 P P P在新坐标系下的坐标 P ′ ( x ′ , y ′ ) P^{\prime}(x^{\prime}, y^{\prime}) P′(x′,y′),这个过程称为坐标系变换。

新坐标的求法可以转换为逆向旋转坐标点的方式,并利用点的旋转变换求得。因此,坐标系时针旋转 θ \theta θ角度,相当于原坐标系中某一点时针旋转 θ \theta θ角度,反之亦然。

总结

  • 某点逆时针旋转 θ \theta θ角度(坐标系顺时针旋转 θ \theta θ角度)的旋转矩阵为:
    R = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] R = \left[\begin{array}{cc}\cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right] R=[cosθsinθ​−sinθcosθ​]
  • 某点顺时针旋转 θ \theta θ角度(坐标系逆时针旋转 θ \theta θ角度)的旋转矩阵为:
    R ′ = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] R^{\prime} = \left[\begin{array}{cc}\cos \theta & \sin \theta \\ -\sin \theta & \cos \theta \end{array}\right] R′=[cosθ−sinθ​sinθcosθ​]
    三维坐标变换可进一步参考Link3。

参考:
Link1
Link2
Link3

二维(三维)坐标系中旋转矩阵详细推导相关推荐

  1. 图形学(8)二维三维图形变换

    本模块内容绝大部分是在慕课上看中国农业大学网客时的笔记,因此算作转载,在此鸣谢赵明.李振波两位老师,感谢他们录制该门课程供大家学习! 在使用计算机处理图像时,我们不可避免对图形的位置.大小.形状等进行 ...

  2. Matlab中矩阵编号方式以及一维二维三维数据间的相互转换

    Matlab中矩阵编号方式以及一维二维三维数据间的相互转换 文章目录 Matlab中矩阵编号方式以及一维二维三维数据间的相互转换 一.问题的提出 二.一维数据转为二维和三维 三.三维数据转为一维和二维 ...

  3. python中numpy中一维二维三维数组的意思

    python中numpy中一维二维三维数组的意思: 以下为一维二维三维数组图形化: 那么一维通俗点就是行(横着看)只有这个,别无二家. 二维通俗点就是行(横着看)+列(竖着看),只有这种形式. 三维比 ...

  4. 最新CAD机械二维三维图块集

    对于机械类CAD模型的需求远远超乎我们的想象,今天给大家分享的是我们最新的CAD机械二维三维图块模型!对于这些模型可在专业的迅捷CAD每日一图获取,迅捷CAD每日一图最新CAD机械二维三维图块集主要包 ...

  5. 深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等

    [深度学习入门到进阶]必看系列,含激活函数.优化策略.损失函数.模型调优.归一化算法.卷积模型.序列模型.预训练模型.对抗神经网络等 专栏详细介绍:[深度学习入门到进阶]必看系列,含激活函数.优化策略 ...

  6. 【计算机图形学】小白谈计算机图形学(四)二维三维图形变换—1

    小白谈计算机图形学(四)二维三维图形变换-1 窗口与视图 二维图形的几何变换 平移变换 比例变换 旋转变换 二维图形变换的矩阵表示 三种变换 齐次坐标变换 原二维线性变换 齐次坐标法 复合变换 例题: ...

  7. 地图二维三维的Web开发

    地图二维三维的Web开发 随着互联网技术的发展和普及,地理信息系统(GIS)也从传统的桌面应用逐渐向Web平台转移,实现了在浏览器中展示和交互地理空间数据的功能.这种基于Web技术和GIS技术的应用开 ...

  8. numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array)

    numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array) 目录

  9. numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row)

    numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row) 目录

最新文章

  1. MFC系统托盘的实现
  2. 【错误记录】Android 应用打包错误 ( Entry name ‘assets/xxx.xml‘ collided )
  3. 什么是Ruby on Rails
  4. python 一维数组所有元素是否大于_如何最好在python中将一维数组连续元素分组...
  5. python多线程写同一文件_Python多线程写文件实例
  6. 如何编写好的C main函数
  7. arm linux dma_alloc_coherent 实现,dma_alloc_coherent (建立一致性 DMA 映射函数)
  8. 大规模搜索+预训练,百度是如何落地的?
  9. eclipse抽取一段代码作为函数的方法(Extract Method)
  10. 最新的ndkr20编译c_Android NDK-r20 交叉编译 FFmpeg 4.2
  11. linux下mysql将表导出_linux下mysql导出数据表命令
  12. windows基线加固
  13. 【许晓笛】 EOS智能合约案例解析(1) 1
  14. 微信二维码使用及配置
  15. 登录 不输入账号密码 不能到下一个页面 没办法通过网址直接进去
  16. FBOX HMI脚本编写注意事项
  17. php移动端url,织梦移动端跟PC端URL问题。 - 搜外SEO问答
  18. 关于遥感影像、DEM、边界矢量数据下载的相关方法
  19. 容天服务器4450系统密码,金铂gob q7-f手机忘记开机密码怎么办
  20. Cesium,mars3d,3dtiles 3d地图显示

热门文章

  1. 微信小程序获取当前地图坐标,并测量指定地点距离
  2. 【Linux下VSCODE自动补全ROS代码】
  3. 语言加工的神经计算模型
  4. nsf与samba基本应用
  5. 区块链分析中的去匿名化问题
  6. 区块链助力提升国有资产监管水平和治理能力,浙江省财政厅推出资产云平台 3.0 版本
  7. [转载]在eclipse中如何用JDK的帮助文档
  8. 冒泡和快速排序的时间复杂度_各种排序算法总结
  9. 智能仓储行业:各细分毛利率与盈利模式分析
  10. layui后端框架的简单使用