精华内容
下载资源
问答
  • 三维旋转
    千次阅读
    2020-12-17 09:25:16

    欧拉角是用来表示三维坐标系中方向和方向变换的,我们平时说的欧拉角其实还可以细分为欧拉角(Eular-angles)和泰特布莱恩角(Tait-Bryan-angles),这两种方法都利用了笛卡尔坐标系的三轴作为旋转轴,主要区别在于选取顺序。欧拉角的旋转顺序有(x,y,x),(x,z,x),(y,x,y),(y,z,y),(z,x,z),(z,y,z),可见选取顺序是a,b,a这样的,也就是绕a轴旋转某角度后,绕新生成的b轴旋转一个角度,最后绕两次旋转以后的a轴再旋转一个角度。泰特布莱恩角的旋转轴选取有(x,y,z),(x,z,y),(y,x,z),(y,z,x),(z,x,y),(z,y,x),遍布笛卡尔坐标系的三轴,比如我们常见的roll-pitch-yaw角就是其中的(x,y,z)的情况。

    三维坐标系

    定义大地坐标系为n ,随船坐标系为b。

    对于绕Z轴旋转(Yaw),假设大地坐标中的一点坐标为(x,y,z),该点在随船坐标系中的坐标为(x',y',z'),对于任意点,

    两个坐标之间的关系为:

    e78e1f24b01a7ca2aac40e027483a76e.png

    用向量形式可以表达为:

    2ebd88445a175f2dfa32580509806a07.png

    同理可得,绕Y轴旋转角(Roll),两个坐标系的转换向量表达为:

    22f2d291ebc21ce2680bfb88906afe61.png

    绕X轴旋转(Pitch),两个坐标系的转换关系为:

    b4ec636f5f305eb077ff3268245a06af.png

    由此可以得到大地坐标系与随船坐标系向量之间的关系

    83025afebdb6f11ec1e0923f32a2fb2d.png

    假设:

    9838d65ebe736cbde89ce24b92611fe7.png

    则,旋转矩阵可以表示为

    5c7f187341ca70415dba440f5618f210.png

    除了使用旋转矩阵来标定,还可以使用旋转向量来表示。

    首先,补充概念:向量的拉格朗日公式:

    c44520eaf1fc22f39a67b704a8c354c0.png

    ef8d46294d2627ededebadadac441852.png

    808a0b549be8feaa9b8d05301e676c98.png

    7fd546224c449800dcb159ce768652b6.png

    d910d25fe765d6a8f0bcd838eed343fd.png

    0fcf897d835b3490fbe18d528caa90f6.png

    af3743b7411ad4eb745fd9c4f11aa66a.png

    4c02ac60094d76c634a585c61d25a228.png

    314dbb24f473f96f773729e71bd2595f.png

    出处:https://blog.csdn.net/hongbin_xu/article/details/78929006

    更多相关内容
  • 这篇文章的主要目的就是简单讨论一下四元数(Quaternion)与三维旋转之间的关 系.虽然网上四元数相关的资料有很多了, 但从我的整理来看,这一篇更实用一些。
  • 本作品搭建了基于stm32f4的三维旋转显示平台,它的显示原理属于三维显示中的体三维显示一类。
  • 实现空间某点,以指定空间点为坐标,进行任意方向旋转,得到空间坐标
  • 三维成像测试:三维物体的心理旋转Shepard(R. Shepard,J. Metzler)用Delphi和OpenGL编写
  • 三维图像的旋转动图,实现三维图像的自动旋转
  • matlab三维旋转。绕XYZ轴旋转的程序代码。(matlab three-dimensional rotation. Around the XYZ axis of the program code.)
  • 为了更好得掌握transform的精髓,所以决定完成三维立方体的模型,可以实现360无死角的三维旋转效果。 但是旋转时判断每个面的视图顺序比较困难,仍未完美解决,希望有人能解答! 源码直接贡献啦: 复制代码代码...
  • Flash 3D三维旋转效果,一个旋转的立方体纸盒,演示如何实现Flash版的3D旋转特效,其中一帧的动画效果请参见截图。
  • 三维重建中的立体空间旋转变换,源代码比较经典,值得一看
  • 本作品搭建了基于stm32f4的三维旋转显示平台,它的显示原理属于三维显示中的体三维显示一类。它是通过适当方式来激励位于透明显示体内的物质,利用可见辐射光的产生三维体像素。当体积内许多方位的物质都被激励后,...
  • 基于OpenGL的三维旋转算法及其在计算化学中的应用,朱铁民,侯进,本文分析了OpenGL显示中几种图形旋转的方案。如利用虚拟球模仿3D跟踪球,利用旋转变换的四元数法以及利用旋转视点的方法等。结合分�
  • 三维旋转引言三维旋转1)欧拉角2)轴角式旋转分解1)V||的旋转2)V⊥的旋转3)V的整体旋转 引言 前面我们了解了 复数在二维旋转中的作用与联系 而四元数与三维旋转之间的关系与复数对二维旋转有很多类似的地方,下面...

    引言

    前面我们了解了 复数在二维旋转中的作用与联系
    而四元数与三维旋转之间的关系与复数对二维旋转有很多类似的地方,下面我们就先来详细了解一下三维旋转的过程。

    三维旋转

    首先讨论一下三维旋转,我们了解到常用的三维旋转有两种方式:

    1)欧拉角

    即按照一定的顺序,分别对X, Y, Z三个轴进行旋转 θ 角。绕各旋转轴的旋转矩阵为:
    在这里插入图片描述
    然后任意的三维旋转可以分解成上述三种旋转方式的组合。(注意:三个旋转的顺序是非常重要的,因为3D旋转矩阵的相乘一般是不可交换的,即在这里插入图片描述
    ),而一般情况下,我们只会选择其中的一个固定的旋转顺序来进行处理,但是这种方式就会导致万向锁的问题。

    2)轴角式

    即按照一个固定方向为旋转轴,绕着此轴旋转 θ 角,如下图中所示,向量V绕着旋转轴u旋转了 θ 度变换到V’
    在这里插入图片描述
    在轴角式变换方法中,一个旋转的定义需要四个变量,旋转轴的u的(x,y,z)方向,以及一个旋转角θ,也就是说有四个自由度。但是三维旋转本质上只有三个自由度,如欧拉角的方式。(多出来的自由度是因为我们在定义旋转轴u时,不仅定义了他的方向,还定义了他的长度,例如测绘/地理中我们使用经纬度两个量就可以找到地球上的任一方位,而再定义海拔则能够找到其具体的空间位置)为了减少长度这个自由度,可以转化一个单位向量:
    在这里插入图片描述

    旋转分解

    对于要旋转的向量V,我们可以分解为平行于旋转轴u和垂直于旋转轴u的两个分量,如下所示:
    在这里插入图片描述
    写成下式所示:
    在这里插入图片描述
    而我们分别旋转上述两个分解向量,再进行组合,则得到旋转后的向量V’
    在这里插入图片描述
    可以从上述的示意图中看出,V‘||其实是V在u上的投影,根据正交投影公式:
    在这里插入图片描述
    而且已知:在这里插入图片描述
    所以:
    在这里插入图片描述
    下面分别对V||与V两个分量进行处理。

    1)V||的旋转

    首先,由于V||本身就是和旋转轴u是平行的,所以这种情况很简单,即旋转前后的变量没有发生改变,仍然与之前的旋转轴u重合。
    在这里插入图片描述

    2)V的旋转

    正交于旋转轴u的分量V旋转示意图如下所示:
    在这里插入图片描述

    现在,我们就把三维上的旋转转换到了二维平面上,此外,我们再定义一个向量w同时正交于向量u和V,这个w可以通过向量叉乘获得。
    在这里插入图片描述
    因为旋转轴u的模长为1,||u|| = 1,所以w的模长为:
    在这里插入图片描述
    这就表明w与V的模长是相同的,位于同一个圆上。利用一些三角公式,我们可以把上图右侧中的V’投影到v和w两个方向上:
    在这里插入图片描述
    在这里插入图片描述

    3)V的整体旋转

    将上述1)V2)V||的两个分量组合在一起就可以获得V的旋转V’。
    在这里插入图片描述
    因为叉乘符合乘法分配律:
    在这里插入图片描述
    将V|| = (uv)u与V = v - (uv)u代入得:
    在这里插入图片描述
    这样,我们就得到了一般形式的旋转公式:
    在这里插入图片描述

    展开全文
  • 一篇透彻得不能再透彻的讲解四元数是怎么回事的文章,这篇文章看过之后你要是再不明白四元数,以后就别看四元数了,不适合你。
  • 为优化设计三维旋转水射流喷头内部结构,利用fluent进行喷头内部结构对射流效果影响规律的数值模拟计算,分析了叶轮导向角分别为15°~75°时的射流流场特征,得出三维旋转水射流喷头叶轮导向角最优值为45°,并分析了...
  • 可以旋转球体与正方体 三维透视 程序每步有具体说明
  • opengl代码,展现opengl三维显示和球体绘制代码,可以控制大小、旋转速度方向。
  • 利用OpenGL实现三维物体的平移旋转,对于初学者非常好!
  • 向量的旋转一共有种表示方法:旋转矩阵、欧拉角和四元数,接下来我们介绍一下每种旋转方法的原理以及相互转换方式。 旋转矩阵 坐标变换的作用 在一个机器人系统中,每个测量元件测量同一物体得出的信息是不一样...

    目录

    旋转矩阵

    坐标变换的作用

    实现坐标变换所需的数据

    位姿变换

    坐标变换中旋转的实质

    坐标变换中平移的实质

    如何计算坐标系B各坐标轴在坐标系A上的投影?(多坐标变换)

    如何实现坐标变换?

    欧拉角

    欧拉角的作用

    欧拉角与旋转矩阵

    欧拉角的弊端

    四元数

    三维旋转

    三维复数

    四元数的定义

    四元数的性质

    四元数乘法

    纯四元数

    四元数的共轭

    四元数与三维旋转

    向量转四元数

    三维旋转转四元数

    旋转矩阵与四元数

    四元数与欧拉角的转化


    向量的旋转一共有三种表示方法:旋转矩阵、欧拉角和四元数,接下来我们介绍一下每种旋转方法的原理以及相互转换方式。

    旋转矩阵

    坐标变换的作用

    在一个机器人系统中,每个测量元件测量同一物体得出的信息是不一样的,原因就在于“每个测量元件所测量的数据是基于不同坐标系所测量的”,例如:

     在这辆车中有激光雷达M和激光雷达W,这两个雷达测量的数据截然不同,但是这辆汽车相对于测量物体的位置是唯一的,这就说明“由不同位置雷达测量的数据代表的物理含义(即都表示汽车与被测物体的相对位置)是相同的”。那既然被测物体在不同坐标系中的坐标不同但物理含义相同,这就涉及到不同坐标系中坐标的相互转化。下面这个视频将使你对坐标变换有一个初步的认识:

    无所不能的矩阵 - 三维图形变换

    实现坐标变换所需的数据

    我们常用出发与坐标系原点终止于坐标系中坐标点的向量来表示坐标系中坐标点相对于坐标原点的位置(距离+方位)。坐标系的相互转化必须以地球坐标系为媒介才可以实现,即坐标系的相互转化必须已知“任意坐标系中各个坐标轴在world坐标系中的坐标”:

     我们会疑惑:world坐标系是什么?

    在空间中会有n+1个坐标系,其中只有一个坐标系起到标定作用,也就是说“其他n个坐标系全都是基于该坐标系找到自己在空间中的位置的”。只有大家都知道了自己在空间中的具体位置,坐标转换才可以顺利进行下去。

    位姿变换

    基于O1的世界坐标系与基于O2的坐标系如下所示:

     在描述机器人运动时,我们常常提及“位姿”,其实位姿是一个合成词,我们可以将其拆解为“位置+姿态”。位置就是指“机器人某个运动关节/测量传感器在世界坐标系中的具体位置,姿态就是”基于该点的坐标系相较于世界坐标系所进行的旋转“,如下所示:

    坐标变换中旋转的实质

    坐标变换的实质就是“投影”。首先,我们解读一下向量是如何转化为坐标的:

    理解向量坐标的由来对于理解坐标变换的实质至关重要!接下来我们考虑一下单位向量在坐标系中的投影:

    单位向量在坐标系中的投影正好为向量P与各个坐标轴夹角的余弦值。

    我们将坐标系A作为参考坐标系(world坐标系),基于坐标系A表示坐标系B的各个坐标轴并且将各个向量单位化,由此我们得到一个旋转矩阵,旋转矩阵各个元素的含义如下: 

     我们先前提到过,向量坐标的计算无非就是投影,那么向量坐标从坐标系B转换至坐标系A无非就是两次投影而已:

     坐标转换的实际意义无非就是将向量P在坐标系A中各个轴的投影分别累加起来形成一个新的坐标。那问题来了,累加如何操作呢?这就涉及旋转矩阵以及矩阵乘法运算了。

    其实,这个矩阵的乘法与卷积有着异曲同工之妙。旋转矩阵的性质:

      

    坐标变换中平移的实质

    向量可以在坐标系中任意移动,只要不改变向量的方向和大小,向量的属性不会发生变化。但是我们研究的是坐标系B中一个坐标点在坐标系A中的映射,因此需要考虑坐标系B的原点O2相较于坐标系A原点O1平移的距离。

     每个基于坐标系B的向量先进性旋转变换,再与向量O1O2求和即可得到向量P再坐标系A中的实际映射。

    如何计算坐标系B各坐标轴在坐标系A上的投影?(多坐标变换)

    首先,我们要知道世界坐标系下坐标系A/坐标系B的各个坐标轴在世界坐标系(参考坐标系)的坐标:

     我们使用旋转矩阵的性质可以得到坐标系B变换至坐标系A的旋转矩阵:

     坐标变换流程如下:

    如何实现坐标变换?

    我们将P点在坐标系B中的坐标转化为P点在坐标系A中对应的坐标:

     坐标变换=旋转+平移,因此坐标变换表达式如下所示:

     这样不利于矩阵运算,我们可以改写为如下形式:

     其中O1O2是从O1指向O2的向量。

    欧拉角

    欧拉角的作用

    欧拉角遵循的是右手系规则,即大拇指指向坐标轴正方向,四指旋转的方向即为转动的正方向,欧拉角包含三个自由量:yaw(偏航角)、pitch(俯仰角)、roll(翻滚角)。

    我们将三次旋转分开讨论,我们以绕Z轴旋转为例来进行说明: 

    绕Z轴旋转的三维立体图如上所示,为了方便,我们查看一下二维旋转图:

    欧拉角与旋转矩阵

    欧拉角可以转化为旋转矩阵,并且利用旋转矩阵的知识进行旋转操作。向量在二维平面上旋转可以让我们联想到向量在复平面中的旋转:

     设向量P的坐标为(x,y),则XOY平面变换公式如下所示:

     由于“绕谁谁不变”的原则,因此Z轴坐标不会发生改变,最终Z轴旋转变换公式如下所示:

     同理,我们可以按照同样的方式得出到X/Y轴旋转的公式:

     旋转矩阵的旋转顺序分为外旋(x->y->z)和内旋(z->y->x),我们一般使用外旋的顺序:

    欧拉角的弊端

    欧拉角有三个分别为yaw(偏航角)、pitch(俯仰角)、roll(翻滚角),代表着绕着Z/Y/X轴旋转的角度,相当于有三个独立变量(自由度)控制一架飞机进行如下旋转操作:

    但是当任何一个坐标轴旋转角度为90度时,就会有两个轴的旋转动作起到对总体旋转结果相同的效果,这就被称为“死锁“,动态图如下所示:

    上面的动画展示了绕X轴旋转90度之后,Y轴与Z轴正方向同向,这就导致绕Y轴旋转θ度与绕Z轴的正方向旋转θ度有同样的效果,即丢失了一个自由度。“丢失了一个自由度“也就意味着真正起到旋转作用的只有Y轴和X轴(或者Z轴和X轴),即飞机无法绕着原Z轴正方向进行旋转操作。

    ”死锁“现象在二维平面图中如下所示:

     无论绕X轴正方向/反方向旋转90度,都会导致Y/Z轴正方向罗在一条直线上!为了解决“死锁“的问题,我们要使用四个自由量,这就引出了”四元数“的概念。

    四元数

    数学的美妙不在于形象的表达变换的逻辑,而在于抽象简单的给出表达式。四元数就是如此,四元数的三维表达晦涩难懂,但是四元数的表达式可以优雅的表达三维中的旋转操作,不但避免了欧拉角的死锁问题而且也避免了旋转矩阵的复杂计算。

                四元数的可视化

    上述视频链接如下所示:四元数的可视化_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1SW411y7W1?from=search&seid=2286694305504614618&spm_id_from=333.337.0.0上述四元数的物理解释较难理解,而我喜欢把它理解为一种旋转算法。数学之美就在于其揭示了许多新的计算方法,幸运的是,四元数就是一种用于物体旋转的计算方法。

    三维旋转

    该部分为后续探究三维旋转与四元数的关系打下基础。

     向量V围绕着向量U进行三维空间中的旋转操作得到向量V‘,其中向量U为单位向量。现在,我们为了简化向量的旋转操作,分解向量V:

     向量V在向量U平行方向上的分量不参与旋转,参与旋转的是向量V垂直于向量U的分量:

     同样,旋转后的向量V’也由垂直于向量U和平行于向量U两部分分量矢量叠加而成:

     最难求出的是向量V‘垂直于向量U的部分,我们以二维平面图为例进行求解:

     找出向量Vw(与原垂直分量垂直)就可以对向量进行分解,要求Vw需了解三维图中Vw:

     我们可以清楚的观察到,Vw与单位向量U以及向量V原垂直分量垂直,故我们可以得出:

     我们结合向量投影的知识可以得到旋转后向量V的表达式:

    三维复数

    四元数包含了四个实参数以及三个虚部(一个实部三个虚部),从四维角度来看如下图所示:

    Re实部与i/j/k三个虚部都垂直,并且在坐标系U内部三个虚部两两垂直形成了一个三维坐标系,并且三维复数的运算规则如下所示(aij=ai*aj):

    1

    i

    j

    k

    1

    1

    i

    j

    k

    i

    i

    -1

    k

    -j

    j

    j

    -k

    -1

    i

    k

    k

    j

    -i

    -1

    上面这个看似简单的表格就决定了四元数的一切性质,你或许看起来很困惑:这个运算法则如何得到,又有何物理意义?回答是:这个乘法是由数学家规定的,其物理意义代表了“按照特定的方向旋转90度的操作”,如果你问我为何这个乘法被定义为三维空间中坐标系旋转90度的操作,那如下YouTube上的评论会一定程度上取消你的疑虑:

     答案就是:我们可以借助这种乘法法则找到三维旋转中的某种规律性的东西。

    四元数的定义

    与复数类似,因为四元数其实就是对于基 {1, 𝑖, 𝑗, 𝑘} 的线性组合,四元数也可以写成向量的形式:

    除此之外,我们经常将四元数的实部与虚部分开,并用一个三维的向量来表示虚部,将它表示为标量和向量的有序对形式:

     我们这里可能还感觉到迷茫,没关系,我们一步一步来!

    四元数的性质

    研究四元数的性质是为了纯四元数和三维空间中的旋转操作做铺垫。

    四元数乘法

    其实,我们也可以将其写成矩阵形式,为后面四元数转旋转矩阵做铺垫:

    注意:左乘与右乘不同,这一点与矩阵的性质类似,但是四元数乘法与矩阵乘法完全是两个概念,我们以魔方旋转为例:

    因为物体的6个侧面一般并不相同(相当于有6个独立不相同的面),按照"左转->下转"和"下转->左转"的顺序得到的Y轴正方向的平面并不一样,所以三维旋转不可逆。

    现在我们从物理含义的角度理解一下左乘和右乘的具体含义:

    1. 左乘旋转四元数(左为操作动作,右为被操作对象)

    2. 右乘旋转四元数(右为操作动作,左为被操作对象)

    3. 四元数旋转公式的含义

    这里,我们结合左乘与右乘的相关知识就可以清楚的了解乘法法则中的变换关系:

    乘法法则

    1

    i

    j

    k

    1

    1

    i

    j

    k

    i

    i

    -1

    k

    -j

    j

    j

    -k

    -1

    i

    k

    k

    j

    -i

    -1

    以j*i=-k,i*i=-1,k*i=j来进行说明(右乘i):

    纯四元数

    在我们正式进入四元数的讨论之前,我们还需要更多关于四元数的定义。如果一个四元数能写成这样的形式:

     那我们则称𝑣为一个纯四元数,即仅有虚部的四元数。因为纯四元数仅由虚部的3D向量决定,我们可以将任意的3D向量转换为纯四元数。纯四元数有一个很重要的特性:如果有两个纯四元数 𝑣 = [0, v], 𝑢 = [0, u],那么由四元数乘法可以得到:

    四元数的共轭

     我们发现四元数的性质与矩阵相似。当四元数模值为1,则该四元数被称为单位四元数。

    四元数与三维旋转

    向量转四元数

    三维空间中向量的旋转全部可以写成纯四元数的形式:

     一定要对这些符号留有印象,对后面的四元数转化为旋转矩阵的理解很有帮助。

    三维旋转转四元数

    向量V绕向量U进行三维空间中的旋转最重要的是向量V沿向量U垂直方向上的分量的旋转:

     注意:

     那么接下来我们可以将三维旋转与纯四元数进行转化:

     其中,四元数q有以下性质:

     其中,最容易误解的还是复数虚部的平方,其与向量U 的模值无关:

     由此可得,该四元数为单位四元数,但是不是纯四元数。这里还需要两个定理:

    ① 定理一:

     我们从物理意义出发也可以理解:向量V平行于向量U的分量绕向量U旋转相当于没旋转

    ② 定理二:

     证明如下所示:

     现在最精彩的来了,我们看上面的式子复杂且不美观,那现在我们使用一些技巧来旋转式子变得美观些:

     我们最终得到四元数与三维旋转的对应关系:

      

    旋转矩阵与四元数

    我们前面介绍过左乘右乘在矩阵转化时的区别,因此我们可以按照乘法法则将四元数转化为如下所示的三维旋转矩阵:

    上述结论可以结合前面提到过的“左乘/右乘”的知识对上述公式进行巧记:

    四元数与欧拉角的转化

    一个展示欧拉角与四元数动态变换关系的网站:

    Quaternions - Visualisationhttps://quaternions.online/ 其中,重点注意atan2(…)与atan(…)函数的区别:

    atan()函数的值域为[-PI/2,PI/2],但是atan2()函数的值域为[-PI,PI]。atan2()函数弥补了atan()函数识别不出第一象限/第三象限、第四象限/第二象限的缺陷。atan2()函数是求解方位角的最佳选择。

    #include <iostream>  
    #include <math.h>  
      
    #define PI (std::acos(-1))  
      
    int main(int argy, char* argv[])  
    {  
        std::cout << "---------第一象限---------" << std::endl;  
        double y1 = 1, x1 = 1;  
        std::cout << "std::atan(y1/x1)=" << std::atan(y1 / x1) / PI * 180 << std::endl;  
        std::cout << "std::atan2(y1,x1)=" << std::atan2(y1, x1) / PI * 180 << std::endl;  
      
        std::cout << "---------第二象限---------" << std::endl;  
        double y4 = 1, x4 = -1;  
        std::cout << "std::atan(y4/x4)=" << std::atan(y4 / x4) / PI * 180 << std::endl;  
        std::cout << "std::atan2(y4,x4)=" << std::atan2(y4, x4) / PI * 180 << std::endl;  
      
        std::cout << "---------第三象限---------" << std::endl;  
        double y3 = -1, x3 = -1;  
        std::cout << "std::atan(y3/x3)=" << std::atan(y3 / x3) / PI * 180 << std::endl;  
        std::cout << "std::atan2(y3,x3)=" << std::atan2(y3, x3) / PI * 180 << std::endl;  
      
        std::cout << "---------第四象限---------" << std::endl;  
        double y2 = -1, x2 = 1;  
        std::cout << "std::atan(y2/x2)=" << std::atan(y2 / x2) / PI * 180 << std::endl;  
        std::cout << "std::atan2(y2,x2)=" << std::atan2(y2, x2) / PI * 180 << std::endl;  
      
        return 0;  
    }  

    运行结果如下所示:

    展开全文
  • 四元数与三维旋转.pdf

    2019-12-19 19:47:07
    关于四元数和三维旋转的数学知识详解,包括复数基础,向量基础计算,向量分解旋转计算,四元数字的构成,四元数插值slerp等内容,另外简要介绍了样条插值等内容
  • 四元数与三维旋转1

    2022-08-03 12:26:56
    1. 复数、向量、矩阵三者之间的关系 2. 复数与二维旋转的关系 3. 轴角法表示三维空间的旋转 4. 四元数 5. 四元数与三维旋转的关系 1. 首先用四元数
  • 为了实现三维激光扫描仪的旋转扫描测量问题,用于实现形状复杂的三维柱形物体的数字化测量,在普通三维激光扫描仪的基础上,增加了一个可以自动旋转的数控转台,从而实现了旋转测量的目的。
  • Krasjet在文档中详细描述了关于三维旋转过程中遇到的“万向锁”问题,对此解读的十分详细,值得一看。
  • 三维旋转四元数系列(0.复数基本介绍)https://blog.csdn.net/SKANK911/article/details/90033451 三维旋转四元数系列(1.复数与二维旋转)https://blog.csdn.net/SKANK911/article/details/90055245 三维旋转...

    三维旋转四元数系列(0.复数基本介绍)https://blog.csdn.net/SKANK911/article/details/90033451

    三维旋转四元数系列(1.复数与二维旋转)https://blog.csdn.net/SKANK911/article/details/90055245

    三维旋转四元数系列(2.三维旋转之轴角与罗德里格斯公式推导)https://blog.csdn.net/SKANK911/article/details/90056646

    三维旋转四元数系列(3.四元数定义与基本性质)https://blog.csdn.net/SKANK911/article/details/90186556

     

    序:上一节我们介绍了四元数的基本概念与性质,这一节讲解四元数如何表示三维旋转。

    1.三维旋转的四元数表示(先给结论)

    设点v[0,x,y,z]=[0,v]经过一次以单位向量定义的旋转轴u[ux,uy,uz]旋转Ѳ角度后,得到了v’,可以使用q四元数乘法表示该旋转。

     其中

    该式可以看作轴角(旋转向量)到四元数的转化公式

    我们定义四元数q的实部为a虚部为b即q[a,b] 则旋转角度为:

    旋转轴u为:

    上式为四元数到轴角的转化公式

    令四元数q的四个系数分别为:

    则旋转可表达为矩阵形式的:

    上式中的矩阵为四元数对应的旋转矩阵。

    假设旋转矩阵为R={mij },ij∈[1,2,3],则其对应的四元数为:

    上式为旋转矩阵到四元数的转化。

    /-----------------------------------------------------------------------------------------------------------/

    当存在多次旋转时,复合旋转的四元数表示为:

      注:上节四元数的共轭性质4

     

    2. 上述结论的证明

    按照本系列的第2节罗德里格斯公式证明部分的定义方式,将旋转前后向量v、v’及其转轴u,以及分别对应的正交转轴分量 与平行转轴分量 ,定义为以下纯四元数:

    按照之前的向量形式推导我们知道正交轴上的转化分量为:

    带入上述定义的纯四元数可得:

    注:上式用到四元数乘法的结合律。

    我们将 看作一个四元数q,则:

    平行于旋转轴的构造纯四元数,按照之前的讨论,其不会变换即:

    则按照纯四元数的表示旋转为:

    其中 且:

    q为我们构造出的四元数,为单位四元数,u为单位向量。则:

    即绕着一个轴u旋转2Ѳ度。

    现在引入一个新的四元数 ,可以看到:

    pp结果与q一样

    由于p也为单位四元数满足:

    将p带入四元数旋转表达式:

    显然 就是至此得到

    注:最后一步带入证明的时候使用了两条特殊交换律引理:

    ① 我们定义的纯四元数 ,而 ,由于 平行于单位向量表示的u,那么:

    ②我们定义的纯四元数 ,而 ,由于 正交于单位向量表示的u,那么:

    实际上上述证明结果即为:虚部为罗德里格斯公式

    /-------------------------------------------------------------------------------------------------------------------------------------/

    定义四元数

    左乘q与右乘q可分别表示为: 那么

             

             

    右下3*3矩阵即为四元数对应的旋转矩阵。

     

    3.补充

    3.1 三维旋转四元数的指数型表达

    对于任意向量v沿单位向量定义的旋转轴u转动Ѳ角度后得到v’,可使用四元数的指数表示。令 ,那么

    可推出如下结论,

    对于四元数

                                                                    对数运算:

                                                                        幂运算:

     

    3.2 四元数的不唯一性

    三维空间的任意旋转都可以由两个互为相反数的四元数表示

    对于 ,q与-q代表同一旋转。如果q表示的是沿着旋转轴u旋转q度,那么−q代表的是沿着相反的旋转轴−u旋转(2π-Ѳ)度:

    注:q与-q虽为两个不同的四元数,但其对应的旋转矩阵一致。

     

    展开全文
  • 该文档主要描述四元数和三维旋转的对应关系,比较通俗易懂……因为忘记了是从哪个博主那拿来的,所以也没法贴原信息,只能在此感谢作者并分享给大家了
  • 这是一套三维旋转图表excel模版下载,喜欢的人都来下载吧。该文档为三维旋转图表excel模版下载,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 三维旋转球【c语言】

    2011-12-14 21:30:48
    这是我们计算机图形学的综合性实验,参考了网上的模型,添加了颜色、不同数量点来进行球的三维运动。
  • 三维旋转特效

    2018-06-09 13:54:07
    jquery 实现三维旋转特效,希望对大家有帮助,有任何问题可以联系我
  • 自己开发的三维菜单,用UGUI实现,头尾接应循环,不限制数量,代码开放可修改,可在本人博客中搜索 Unity UGUI实现3D旋转循环菜单 查看效果
  • 三维旋转矩阵

    2013-04-13 16:44:09
    三维空间必备的资料,很清晰的给出具体表达式和推导过程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,979
精华内容 40,791
关键字:

三维旋转