旋转矩阵 订阅
旋转矩阵(英语:Rotation matrix)是在乘以一个向量的时候有改变向量的方向但不改变大小的效果并保持了手性的矩阵。旋转矩阵不包括点反演,点反演可以改变手性,也就是把右手坐标系改变成左手坐标系或反之。所有旋转加上反演形成了正交矩阵的集合。旋转可分为主动旋转与被动旋转。主动旋转是指将向量逆时针围绕旋转轴所做出的旋转。被动旋转是对坐标轴本身进行的逆时针旋转,它相当于主动旋转的逆操作。 [1] 展开全文
旋转矩阵(英语:Rotation matrix)是在乘以一个向量的时候有改变向量的方向但不改变大小的效果并保持了手性的矩阵。旋转矩阵不包括点反演,点反演可以改变手性,也就是把右手坐标系改变成左手坐标系或反之。所有旋转加上反演形成了正交矩阵的集合。旋转可分为主动旋转与被动旋转。主动旋转是指将向量逆时针围绕旋转轴所做出的旋转。被动旋转是对坐标轴本身进行的逆时针旋转,它相当于主动旋转的逆操作。 [1]
信息
外文名
Rotation matrix
相关术语
正交矩阵
分    为
主动旋转与被动旋转
中文名
旋转矩阵
研究者
底特罗夫
学    科
数学
旋转矩阵简介
旋转矩阵的原理在数学上涉及到的是一种组合设计:覆盖设计。而覆盖设计,填装设计,斯坦纳系,t-设计都是离散数学中的组合优化问题。它们解决的是如何组合集合中的元素以达到某种特定的要求。其最古老的数学命题是寇克曼女生问题:某教员打算这样安排她班上的十五名女生散步:散步时三女生为一组,共五组。问能否在一周内每日安排一次散步,使得每两名女生在一周内一道散步恰好一次?寇克曼于1847年提出了该问题,过了100多年后,对于一般形式的寇克曼问题的存在性才彻底解决。用1~15这15个数字分别代表15个女生,其中的一组符合要求的分组方法是:星期日:(1,2,3),(4,8,12),(5,10,15),(6,11,13),(7,9,14)星期一:(1,4,5),(2,8,10),(3,13,14),(6,9,15),(7,11,12)星期二:(1,6,7),(2,9,11),(3,12,15),(4,10,14),(5,8,13)星期三:(1,8,9),(2,12,14),(3,5,6),(4,11,15),(7,10,13)星期四:(1,10,11),(2,13,15),(3,4,7),(5,9,12),(6,8,14)星期五:(1,12,13),(2,4,6),(3,9,10),(5,11,14),(7,8,15)星期六:(1,14,15),(2,5,7),(3,8,11),(4,9,13),(6,10,12)
收起全文
精华内容
下载资源
问答
  • 旋转矩阵

    2020-10-02 17:50:38
    旋转矩阵 旋转矩阵(Rotation Matrix)的推导及其应用 向量的平移,比较简单。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56kDDENC-1601632145097)...

    旋转矩阵

    旋转矩阵(Rotation Matrix)的推导及其应用

    向量的平移,比较简单。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56kDDENC-1601632145097)(http://fan2b.net/images/post/2015-09-10/Matrix-21.png)]

    缩放也较为简单

    “向量平移”的图片搜索结果

    矩阵如何进行计算呢?之前的文章中有简介一种方法,把行旋转一下,然后与右侧对应相乘。在谷歌图片搜索旋转矩阵时,看到这张动图,觉得表述的很清晰了。

    https://www.cut-the-knot.org/pythagoras/HomogeneousCoordinates/homogeneous.files/animation03.gif

    稍微复杂一点的是旋转,如果只是二维也很简单(因为很直观),但因为是三维的,有xyz三个轴,先推导二维的再延伸到三维。

    YouTube上有很好的推导过程,视频链接地址(需穿.墙) https://www.youtube.com/watch?v=8XRvpDhTJpw

    有点P(Xa,Ya),当坐标由 x –> y 旋转 θ 度后,求该点在新坐标轴的坐标是多少

    image

    image

    image

    image

    所以对于二维旋转来讲,旋转矩阵就是

    image

    三维旋转,需要先搞清楚正、负方向(使用的是右手法则,在二维平面增加一维z,它的正方向朝向屏幕外)。

    绕x轴进行旋转(在yz平面顺时针旋转)

    XAxis

    [1 0 0; 0 cosalpha sinalpha; 0 -sinalpha cosalpha]

    绕y轴进行旋转(在zx平面顺时针旋转)

    YAxis

    [cosbeta 0 -sinbeta; 0 1 0; sinbeta 0 cosbeta]

    绕z轴进行旋转(在xy平面顺时针旋转)

    ZAxis

    [cosgamma singamma 0; -singamma cosgamma 0; 0 0 1]

    在这里插入图片描述

    — 图片来源:http://mathworld.wolfram.com/RotationMatrix.html

    参考:https://zh.wikipedia.org/wiki/旋转矩阵
    在这里插入图片描述

    展开全文
  • 3维旋转矩阵:只有一点旋转矩阵
  • 旋转变换(一)旋转矩阵

    万次阅读 多人点赞 2017-03-27 17:15:37
    本文主要介绍了计算机图形学中的旋转的概念和矩阵的描述方式,包括二维和三维旋转矩阵的推导过程

    1. 简介

    计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移、旋转、缩放、剪切这几种。本文以及接下来的几篇文章重点介绍一下关于旋转的变换,包括二维旋转变换、三维旋转变换以及它的一些表达方式(旋转矩阵、四元数、欧拉角等)。

    2. 绕原点二维旋转

    首先要明确旋转在二维中是绕着某一个点进行旋转,三维中是绕着某一个轴进行旋转。二维旋转中最简单的场景是绕着坐标原点进行的旋转,如下图所示:

    2DRotation

    如图所示点v 绕 原点旋转θ 角,得到点v’,假设 v点的坐标是(x, y) ,那么可以推导得到 v’点的坐标(x’, y’)(设原点到v的距离是r,原点到v点的向量与x轴的夹角是ϕ )
    x=rcosϕy=rsinϕ
    x=rcos(θ+ϕ)y=rsin(θ+ϕ)
    通过三角函数展开得到
    x=rcosθcosϕrsinθsinϕ
    y=rsinθcosϕ+rcosθsinϕ
    带入x和y表达式得到
    x=xcosθysinθ
    y=xsinθ+ycosθ
    写成矩阵的形式是:

    [xy]=[cosθsinθsinθcosθ][xy]

    尽管图示中仅仅表示的是旋转一个锐角θ的情形,但是我们推导中使用的是三角函数的基本定义来计算坐标的,因此当旋转的角度是任意角度(例如大于180度,导致v’点进入到第四象限)结论仍然是成立的。

    3. 绕任意点的二维旋转

    绕原点的旋转是二维旋转最基本的情况,当我们需要进行绕任意点旋转时,我们可以把这种情况转换到绕原点的旋转,思路如下:
    1. 首先将旋转点移动到原点处
    2. 执行如2所描述的绕原点的旋转
    3. 再将旋转点移回到原来的位置

    2DArbitraryRotate

    也就是说在处理绕任意点旋转的情况下需要执行两次平移的操作。假设平移的矩阵是T(x,y),也就是说我们需要得到的坐标 v’=T(x,y)*R*T(-x,-y)(我们使用的是列坐标描述点的坐标,因此是左乘,首先执行T(-x,-y))

    在计算机图形学中,为了统一将平移、旋转、缩放等用矩阵表示,需要引入齐次坐标。(假设使用2x2的矩阵,是没有办法描述平移操作的,只有引入3x3矩阵形式,才能统一描述二维中的平移、旋转、缩放操作。同理必须使用4x4的矩阵才能统一描述三维的变换)。

    对于二维平移,如下图所示,P点经过x和y方向的平移到P’点,可以得到:

    2DTranslate

    x=x+txy=y+ty
    由于引入了齐次坐标,在描述二维坐标的时候,使用(x,y,w)的方式(一般w=1),于是可以写成下面矩阵的形式

    xy1=100010txty1xy1

    按矩阵乘法展开,正好得到上面的表达式。也就是说平移矩阵是
    100010txty1

    如果平移值是(-tx,-ty)那么很明显平移矩阵式
    100010txty1

    我们可以把2中描述的旋转矩阵也扩展到3x3的方式,变为:
    xy1=cosθsinθ0sinθcosθ0001xy1

    从平移和旋转的矩阵可以看出,3x3矩阵的前2x2部分是和旋转相关的,第三列与平移相关。有了上面的基础之后,我们很容易得出二维中绕任意点旋转的旋转矩阵了,只需要把三个矩阵乘起来即可:

    M=100010txty1cosθsinθ0sinθcosθ0001100010txty1=cosθsinθ0sinθcosθ0(1cosθ)tx+tysinθ(1cosθ)tytxsinθ1

    4. 三维基本旋转

    我们可以把一个旋转转换为绕基本坐标轴的旋转,因此有必要讨论一下绕三个坐标值x、y、z的旋转。
    本文在讨论过程中使用的是类似于OpenGL中定义的右手坐标系,同时旋转角度的正负也遵循右手坐标系的约定。如下图所示

    RightHanderRule

    4.1 绕X轴的旋转

    在三维场景中,当一个点P(x,y,z)绕x轴旋转θ角得到点P’(x’,y’,z’)。由于是绕x轴进行的旋转,因此x坐标保持不变,y和z组成的yoz(o是坐标原点)平面上进行的是一个二维的旋转,可以参考上图(y轴类似于二维旋转中的x轴,z轴类似于二维旋转中的y轴),于是有:
    x=x
    y=ycosθzsinθ
    z=ysinθ+zcosθ
    写成(4x4)矩阵的形式

    xyz1=10000cosθsinθ00sinθcosθ00001xyz1

    4.2 绕Y轴旋转

    绕Y轴的旋转和绕X轴的旋转类似,Y坐标保持不变,除Y轴之外,ZOX组成的平面进行一次二维的旋转(Z轴类似于二维旋转的X轴,X轴类似于二维旋转中的Y轴,注意这里是ZOX,而不是XOZ,观察上图中右手系的图片可以很容易了解到这一点),同样有:
    x=zsinθ+xcosθ
    y=y
    z=zcosθxsinθ
    写成(4x4)矩阵的形式

    xyz1=cosθ0sinθ00100sinθ0cosθ00001xyz1

    4.3 绕Z轴旋转

    与上面类似,绕Z轴旋转,Z坐标保持不变,xoy组成的平面内正好进行一次二维旋转(和上面讨论二维旋转的情况完全一样)

    xyz1=cosθsinθ00sinθcosθ0000100001xyz1

    4.4 小结

    上面描述了三维变换中绕单一轴旋转的矩阵表达形式,绕三个轴旋转的矩阵很类似,其中绕y轴旋转的矩阵与绕x和z轴旋转的矩阵略有点不同(主要是三个轴向顺序和书写矩阵的方式不一致导致的,绕三个不同坐标旋转轴以及其他二个坐标轴组成平面的顺序是: XYZ(绕x轴) YZX(绕y轴) ZXY(绕z轴),其中绕y轴旋转,其他两个轴是ZX,这和我们书写矩阵按

    xyz1

    的方式不一致,而导致看起来绕Y轴旋转的矩阵似乎是和其他两个矩阵不一致。如果我们颠倒写法,将公式写成
    zyx1=cosθ0sinθ00100sinθ0cosθ00001zyx1

    的方式,那么这三个旋转矩阵看起来在形式上就统一了,都是
    [cosθsinθsinθcosθ]

    这种表现形式了(左上角都是sinθ

    5. 绕任意轴的三维旋转

    绕任意轴的三维旋转可以使用类似于绕任意点的二维旋转一样,将旋转分解为一些列基本的旋转。绕任意轴旋转如下图所示:

    RotateArbitrary

    P点绕向量u旋转θ角,得到点Q,已知P点的坐标和向量u,如何求Q点的坐标。
    我们可以把向量u进行一些旋转,让它与z轴重合,之后旋转P到Q就作了一次绕Z轴的三维基本旋转,之后我们再执行反向的旋转,将向量u变回到它原来的方向,也就是说需要进行的操作如下:
    1. 将旋转轴u绕x轴旋转至xoz平面
    2. 将旋转轴u绕y轴旋转至于z轴重合
    3. 绕z轴旋转θ
    4. 执行步骤2的逆过程
    5. 执行步骤1的逆过程
    原始的旋转轴u如下图所示:

    OriginVector_u
    第1、2、3步骤如下图所示:
    Step2
    Step3
    Step4

    步骤1将向量u旋转至xoz平面的操作是一个绕x轴的旋转操作,步骤2将向量u旋转到与z轴重合,第1、2步骤的示意图如下:

    RotateToZ
    作点P在yoz平面的投影点q,q的坐标是(0, b, c),原点o与q点的连线oq和z轴的夹角就是u绕x轴旋转的角度。通过这次旋转使得u向量旋转到xoz平面(图中的or向量)【步骤1】
    过r点作z轴的垂线,or与z轴的夹角为β, 这个角度就是绕Y轴旋转的角度,通过这次旋转使得u向量旋转到与z轴重合【步骤2】

    步骤1中绕x轴旋转的是一次基本的绕x轴的三维旋转,按照之前的讨论,旋转矩阵是:

    10000cosθsinθ00sinθcosθ00001

    这里的θ就是图中所示的α角 (注意α角度是绕x旋转的正的角度)
    从图中我们还可以得到:
    cosα=c(b2+c2)

    sinα=b(b2+c2)

    于是旋转矩阵(记作 Rx(α))为:
    10000c(b2+c2)b(b2+c2)00b(b2+c2)c(b2+c2)00001

    在完成步骤1之后,向量u被变换到了r的位置,我们继续步骤2的操作,绕y轴旋转负的β角(注意:这里的β是负的),经过这次变换之后向量u与z轴完全重合,由于这一步也是执行的一次绕Y轴的基本旋转,旋转矩阵(记作 Ry(β))为:
    cosθ0sinθ00100sinθ0cosθ00001

    使用β替换表达式中的θ,此外根据图中描述,我们可以计算得到:
    cosβ=(b2+c2)(a2+b2+c2)

    sinβ=a(a2+b2+c2)

    带入上面的表达式,于是旋转矩阵(记作 Ry(β))为:
    (b2+c2)(a2+b2+c2)0a(a2+b2+c2)00100a(a2+b2+c2)0(b2+c2)(a2+b2+c2)00001

    在完成前面两个步骤之后,u方向和z轴完全重合,因此执行旋转θ角,执行的是一次绕z轴的基本三维旋转(记作 R(θ),根据之前的讨论,我们可以得到:

    cosθsinθ00sinθcosθ0000100001

    最后两步骤是前面1和2的逆操作,也就是绕Y轴旋转β 和绕X轴旋转α,这两个矩阵分别记作 Ry(β)Rx(α),得到它们的方式很简单,只需要将上面步骤1和步骤2中的角度修改成相反数即可,也就是:

    Ry(β)=(b2+c2)(a2+b2+c2)0a(a2+b2+c2)00100a(a2+b2+c2)0(b2+c2)(a2+b2+c2)00001

    Rx(α)=10000c(b2+c2)b(b2+c2)00b(b2+c2)c(b2+c2)00001

    最终得到 绕任意轴u旋转的旋转矩阵是【因为使用的列向量,因此执行的是左乘(从右往左)】:

    MR=Rx(α)Ry(β)Rz(θ)Ry(β)Rx(α)=

    roateMatrix
    (注:式中的(u,v,w)对应上文中向量(a,b,c),公式我自己笔算过,为了减少编辑公式的时间(使用LaTex编辑太繁琐,因此找了一张公式的图片贴在此处)

    如果向量是经过单位化的(单位向量),那么有a2+b2+c2=1,可以简化上述的公式,得到:

    NormalizedRotate

    参考文献:

    1. Wiki Rotation (mathematics)
    2. Euler’s rotation theorem
    3. Maths - Rotation Matrices
    4. 绕任意轴旋转
    5. Rotation About an Arbitrary Axis in 3 Dimensions
    6. Rotation about an Arbitrary Axis (Line)
    展开全文
  • 二维旋转矩阵推导: 点沿轴逆时针旋转度后变为点: 有, 则旋转矩阵为 同理可得在三维坐标系(右手准则)下: 绕轴逆时针旋转角度旋转矩阵为: 绕轴逆时针旋转角度旋转矩阵为: 绕轴逆时针旋转角度...

    二维旋转矩阵推导:

    A沿Y轴逆时针旋转\theta度后变为点{A}'

    x={OA}cos\varphiy={OA}sin\varphi

    {x}'= {OA}'cos(\varphi +\theta )={OA}'(cos\varphi cos\theta -sin\varphi sin\theta )=xcos\theta -ysin\theta

    {y}'={OA}'sin(\varphi +\theta )={OA}'(sin\varphi cos\theta +cos\varphi sin\theta )=ycos\theta +xsin\theta

    则旋转矩阵R\begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix}

    顺时针旋转时R\begin{bmatrix} cos\theta & sin\theta \\ -sin\theta & cos\theta \end{bmatrix}

    同理可得在三维坐标系(右手准则)下:

    X轴逆时针旋转\theta角度旋转矩阵R_{x}为:\begin{bmatrix} 1 & 0 & 0\\ 0 & cos\theta & -sin\theta \\ 0 & sin\theta & cos\theta \end{bmatrix}X轴坐标不变,YZ平面旋转。

    同理,绕Y轴逆时针旋转\theta角度旋转矩阵R_{y}为:\begin{bmatrix} cos\theta & 0 & sin\theta \\ 0 & 1 & 0 \\ -sin\theta & 0 & cos\theta \end{bmatrix}

    Z轴逆时针旋转\theta角度旋转矩阵R_{z}为:\begin{bmatrix} cos\theta & -sin\theta & 0\\ sin\theta & cos\theta & 0\\ 0 & 0 & 1 \end{bmatrix}

    则三维旋转矩阵为:R_{x}\cdot R_{y}\cdot R_{z}

     

    展开全文
  • 定角(Fixed angles) 围绕固定的坐标系转动。固定坐标系的原点,坐标系再围绕已经固定的轴转动,全程原坐标系不动。...由角度推旋转矩阵旋转矩阵推角度 欧拉角(Euler angles) “自旋转..

    定角(Fixed angles)

    围绕固定的坐标系转动。固定坐标系的原点,坐标系再围绕已经固定的轴转动,全程原坐标系不动

    注意!移动位置的顺序可以调换,但是旋转的顺序不能调换,结果不一样。

    以X-Y-Z型为例子:即先围绕X轴进行转动γ°,然后围绕Y轴进行转动β°,最后围绕Z轴进行转动α°。注意逆时针为正方向。

    X-Y-Z型公式:

    重点先转的轴的\large R放后面运算,如下

     举例:

    由角度推旋转矩阵

    由旋转矩阵推角度

     


    欧拉角(Euler angles)

    “自旋转”,围绕当下(自己)的坐标系某轴转动,就是每次旋转,都固定被围绕的某一轴,另两轴动。

    每次旋转,整个坐标系都会改变位置。

    以Z-Y-Z型为例的公式:

    重点先转的轴的\large R放前面运算,如下

    举例:

    矩阵转角度:

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,079
精华内容 5,631
关键字:

旋转矩阵