• 旋转矩阵推导过程


    旋转矩阵为什么是很多正余弦函数值的集合,旋转矩阵有什么性质?旋转矩阵出现的意义在哪里?二维旋转和三维旋转的表达式有什么不同?

    本文首先推导了二维情况下旋转矩阵代数及矩阵表达式,然后将结果推广到三维。

    一、二维空间下的旋转矩阵

    假设点 P P P在坐标系 { B } \{B\} {B}的坐标为 P = { x , y } P=\{x,y\} P={x,y},此时存在另一坐标系 { A } \{A\} {A},能否给出相同点 P P P { A } \{A\} {A}坐标系下的坐标值 P ′ = { x ′ , y ′ } P'=\{x',y'\} P={x,y}?答案是肯定的,前提是已知这两个坐标系 { A } \{A\} {A} { B } \{B\} {B}之间的关系,当两个坐标系之间的关系为纯旋转时,旋转矩阵就是用来描述两个坐标系之间的关系的一种表达。(简单来说,就是已知 { B } \{B\} {B}下的点坐标,求 { A } \{A\} {A}下的点坐标)。如下图:

    在这里插入图片描述

    { A } \{A\} {A}坐标系逆时针转 θ \theta θ度与 { B } \{B\} {B}中标系完全重合,为了方便描述,我们假设原点到 P P P的距离为 r r r,考虑坐标系 { B } \{B\} {B},根据直角坐标系定义有:
    x = r cos ⁡ α y = r sin ⁡ α (1) x=r\cos\alpha\\ y=r\sin\alpha\tag{1} x=rcosαy=rsinα(1)

    考虑坐标系 { A } \{A\} {A},有:
    x ′ = r cos ⁡ ( α + θ ) y ′ = r sin ⁡ ( α + θ ) (2) x'=r\cos(\alpha+\theta)\\ y'=r\sin(\alpha+\theta)\tag{2} x=rcos(α+θ)y=rsin(α+θ)(2)
    展开后的表达式为:
    x ′ = r ( cos ⁡ α cos ⁡ θ − sin ⁡ α sin ⁡ θ ) y ′ = r ( sin ⁡ θ cos ⁡ α + cos ⁡ θ sin ⁡ α ) (3) x'=r(\cos\alpha\cos\theta-\sin\alpha\sin\theta)\\ y'=r(\sin\theta\cos\alpha+\cos\theta\sin\alpha)\tag{3} x=r(cosαcosθsinαsinθ)y=r(sinθcosα+cosθsinα)(3)
    将(1)带入(3)得:
    x ′ = x cos ⁡ α − y sin ⁡ α y ′ = y cos ⁡ α + x sin ⁡ α (4) x'=x\cos\alpha-y\sin\alpha\\ y'=y\cos\alpha+x\sin\alpha\tag{4} x=xcosαysinαy=ycosα+xsinα(4)
    (4)就是我们要找的,实现同一个点在不同坐标系下的代数表达式,这个表达式完成了由 { A } \{A\} {A}表示的点到 { B } \{B\} {B}坐标系下的点的转换。将其写成矩阵形式:
    [ x ′ y ′ ] = [ cos ⁡ α − sin ⁡ α sin ⁡ α cos ⁡ α ] [ x y ] (5)

    [xy]" role="presentation" style="position: relative;">[xy]
    =
    [cosαsinαsinαcosα]" role="presentation" style="position: relative;">[cosαsinαsinαcosα]
    [xy]" role="presentation" style="position: relative;">[xy]
    \tag{5} [xy]=[cosαsinαsinαcosα][xy](5)
    记上式中正余弦值构成的矩阵为 A B R ^B_AR ABR,表示由 { A } \{A\} {A}坐标系切换到 { B } \{B\} {B}的旋转矩阵,对于 { B } \{B\} {B}下所有点都能通过左乘这个旋转矩阵得到。记 B P ^BP BP为坐标系 { B } \{B\} {B}下的点, A P ^AP AP为坐标系 { A } \{A\} {A}下的点,所以(5)可写成:
    A P = B A R B P (6) ^AP=^A_BR^BP\tag{6} AP=BARBP(6)
    所以二维旋转矩阵的表达式为:
    B A R = [ cos ⁡ α − sin ⁡ α sin ⁡ α cos ⁡ α ] (7) ^A_BR=
    [cosαsinαsinαcosα]" role="presentation" style="position: relative;">[cosαsinαsinαcosα]
    \tag{7}
    BAR=[cosαsinαsinαcosα](7)

    二、三维空间下的旋转矩阵

    对于二维空间,旋转绕着 X × Y X\times Y X×Y方向进行旋转,从箭头反方向观察旋转行为,顺时针角度为正,逆时针为负,三维空间纯旋转的话,将会有三种情况,分别是沿着坐标系的 X X X Y Y Y Z Z Z反方向观察旋转情况,同样是“顺正逆负”。下面是三种情况旋转一定角度的平面图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    以第一个,绕 Z Z Z旋转为例,说明其旋转矩阵表达式。假设旋转前的点为 O X Y P = { x , y , z } ^{OXY}P=\{x,y,z\} OXYP={x,y,z},旋转后的点记为 O X ′ Y ′ P = { x ′ , y ′ , z ′ } ^{OX'Y'}P=\{x',y',z'\} OXYP={x,y,z},原坐标系向新坐标系旋转 θ \theta θ与新坐标完全重合,类似于二维空间下的旋转矩阵的推导:
    x ′ = x cos ⁡ α − y sin ⁡ α y ′ = y cos ⁡ α + x sin ⁡ α z ′ = z (8)

    x=xcosαysinαy=ycosα+xsinαz=z" role="presentation" style="position: relative;">x=xcosαysinαy=ycosα+xsinαz=z
    \tag{8} xyz=xcosαysinα=ycosα+xsinα=z(8)
    写成矩阵形式:
    [ x ′ y ′ z ′ ] = [ cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α 0 0 0 1 ] [ x ′ y ′ z ′ ] (9)
    [xyz]" role="presentation" style="position: relative;">[xyz]
    =
    [cosαsinα0sinαcosα0001]" role="presentation" style="position: relative;">[cosαsinα0sinαcosα0001]
    [xyz]" role="presentation" style="position: relative;">[xyz]
    \tag{9}
    xyz = cosαsinα0sinαcosα0001 xyz (9)

    记这个旋转矩阵为 r o t z rotz rotz
    r o t z ( θ ) = [ cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α 0 0 0 1 ] (10) rotz(\theta)=
    [cosαsinα0sinαcosα0001]" role="presentation" style="position: relative;">[cosαsinα0sinαcosα0001]
    \tag{10}
    rotz(θ)= cosαsinα0sinαcosα0001 (10)

    同理可以得到 r o t y roty roty r o t x rotx rotx
    r o t y ( θ ) = [ cos ⁡ θ 0 sin ⁡ θ 0 1 0 − sin ⁡ θ 0 cos ⁡ θ ] (11) roty(\theta)=
    [cosθ0sinθ010sinθ0cosθ]" role="presentation" style="position: relative;">[cosθ0sinθ010sinθ0cosθ]
    \tag{11}
    roty(θ)= cosθ0sinθ010sinθ0cosθ (11)

    r o t x ( θ ) = [ 1 0 0 0 cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ ] (12) rotx(\theta)=

    [1000cosθsinθ0sinθcosθ]" role="presentation" style="position: relative;">[1000cosθsinθ0sinθcosθ]
    \tag{12} rotx(θ)= 1000cosθsinθ0sinθcosθ (12)

    三、点旋转对应旋转矩阵

    前面说到的是由于坐标系切换引起的点坐标的变化,如果空间中的一点真的绕某个轴转动,那么这个点应该如何变化?如下图:
    在这里插入图片描述
    P ( x , y ) P(x,y) P(x,y)点逆时针旋转到 P ′ ( x ′ , y ′ ) P'(x',y') P(x,y),,旋转前有方程:
    x = r cos ⁡ α y = r sin ⁡ α (13) x=r\cos\alpha\\ y=r\sin\alpha\tag{13} x=rcosαy=rsinα(13)
    旋转后,半径 r r r没有发生改变:
    x ′ = cos ⁡ ( α + θ ) y ′ = sin ⁡ ( α + θ ) (14) x'=\cos(\alpha+\theta)\\ y'=\sin(\alpha+\theta)\tag{14} x=cos(α+θ)y=sin(α+θ)(14)
    展开后有:
    x ′ = r cos ⁡ α cos ⁡ θ − r s i n α sin ⁡ θ y ′ = r sin ⁡ α cos ⁡ θ + r cos ⁡ α sin ⁡ θ (15) x'=r\cos\alpha\cos\theta-rsin\alpha\sin\theta\\ y'=r\sin\alpha\cos\theta+r\cos\alpha\sin\theta\tag{15} x=rcosαcosθrsinαsinθy=rsinαcosθ+rcosαsinθ(15)
    联立方程(13)(15)有:
    x ′ = x cos ⁡ θ − y sin ⁡ θ y ′ = y cos ⁡ θ + x sin ⁡ θ (16) x'=x\cos\theta-y\sin\theta\\ y'=y\cos\theta+x\sin\theta\tag{16} x=xcosθysinθy=ycosθ+xsinθ(16)
    写成矩阵形式有:
    [ x ′ y ′ ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ x y ] (17)

    [xy]" role="presentation" style="position: relative;">[xy]
    =
    [cosθsinθsinθcosθ]" role="presentation" style="position: relative;">[cosθsinθsinθcosθ]
    [xy]" role="presentation" style="position: relative;">[xy]
    \tag{17} [xy]=[cosθsinθsinθcosθ][xy](17)
    令:
    R = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] R=
    [cosθsinθsinθcosθ]" role="presentation" style="position: relative;">[cosθsinθsinθcosθ]
    R=[cosθsinθsinθcosθ]

    (17)可以写成:
    P ′ = R P (18) P'=RP\tag{18} P=RP(18)
    因为只涉及到一个坐标系,所以这个矩阵坐标不加任何字母,这个矩阵可以帮助我们计算旋转之后点的坐标,他也被称为旋转矩阵,和坐标系旋转表达式一模一样,对于三维的点实际旋转的旋转矩阵,这里就不作进一步推导。

    四、旋转矩阵的意义

    旋转矩阵的含义有三个:

    • 描述坐标系之间的关系,坐标三个主轴向另一个坐标系三个主轴投影;
    • 同点在不同坐标系的转换左乘矩阵;
    • 点旋转后在同一坐标系的转换左乘矩阵;

    两个坐标系若只存在旋转关系,那么这个关系可以用旋转矩阵来表示,这个关系具有方向性,也就是 { A } \{A\} {A}坐标系到 { B } \{B\} {B}不等于 { A } \{A\} {A} { B } \{B\} {B},但是存在以下关系:
    B A R = A B R − 1 (19) ^A_BR=^B_AR^{-1}\tag{19} BAR=ABR1(19)
    而且由于旋转矩阵是一个单位正交矩阵,所以有:
    B A R = A B R T (20) ^A_BR=^B_AR^T\tag{20} BAR=ABRT(20)
    在实际使用中,应该明确这个方向性,假如你已知 { B } \{B\} {B}坐标系下的点 B P ^BP BP要求在 { B } \{B\} {B}下的点,那么旋转矩阵的 θ \theta θ变量值,应该是 { A } \{A\} {A}坐标系沿着哪个方向旋转多少角度,如果是顺时针 ,那么这个值应该是负数,反之则是一个正数。

    Tips:如何确定旋转矩阵的正负?对于点实际旋转类型的旋转矩阵,应该是旋转前是逆时针旋转多少度到达新的点;对于点在不同坐标系下的旋转矩阵,应该是目标坐标系是如何旋转至现在点所在坐标系的。

  • 相关阅读:
    English语法_介词 - for
    慧都MES系统怎么实施?有哪些注意事项?
    【Verilog基础】一些时序约束相关的面试真题
    【Seata】初识Seata
    【更新公告】AirtestIDE更新至1.2.17版本
    【MySql】 深入理解SQL中的日期处理:NVL和TIMESTAMPDIFF函数的应用
    【C++】C++职工信息管理系统
    Head First设计模式中的典型设计模式解析与案例分析
    js基础笔记学习278初步完成贪吃蛇运动1
    矩阵分析与应用
  • 原文地址:https://blog.csdn.net/weixin_39258979/article/details/125870860