仅仅记录一下查资料过程中的个人思路,可能有错,大佬勿喷。

四元数本身是对四维空间的一个描述,所以难以理解是正常的,为了方便理解,普遍采用投影的方式,将四维空间投影到三维空间,利用三维空间的特征去对四维空间进行理解。而这相差的一维的对应关系,就需要利用推广的方式去获得,也就是说要研究的内容不仅包括四维投影到三维,还要包括三维到二维、二维到一维,于是就对应产生了视频里的三个章节。

从二维到一维,首先要定义一个二维的图形,这里选择用单位圆去表示旋转,单位圆采用虚数的表示形式,其中一个虚轴和一个实轴各代表二维中的一个维度,那么这个二维的复数表示形式类推的话就可以叫做二元数。二元数采用球极投影的方法去将单位圆的每个点在一维数轴上找到一个对应的位置。需要注意,这里的单位圆一定要看做每个点都是独一无二的圆,只有这样才能够体现旋转的过程,不然这个完全对称图形怎么旋转都还是对称的,就体现不出旋转了。这样坐标轴上的一个位置就可以代表单位圆上的一个位置,而且这个位置是一一对应的,但是这个一一对应的关系并不会充满整个轴,总有点是投影不到的。

从三维到二维,定义的就是一个三维的图形,这里选择单位球去表示,单位球也才用一个类似虚数的表示方法,两个虚轴和一个实轴分别代表三维中的每一个维度,同理这样就将这个数叫做三元数,同理采用球极投影的方法去将单位球投影在二维平面上,那么单位球上的每个点就可以对应到平面上的一个点,并且是一一对应的关系。

放到四维到三维,同样道理四元数肯定是四维空间中的一个人类无法想象的单位物体,然后这个物体也是用类似虚数的表示方法在表示,三个虚轴和一个实轴分别代表四个维度,采用球极投影的方法将这个单位物体投影到一个三维空间中,单位物体上的每个点都有个唯一对应的三维空间点。

为了方便表示旋转,需要选择一个标志物,因为所有点的旋转变化是很复杂的,需要用几个关键点去代表性地表示旋转,所以利用这个标志物去标志几个关键点在旋转过程中投影位置的变化关系,这样就可以描述旋转的过程。

二元数旋转的过程可能还不是那么明显,就选择了虚轴上的两个标志点正负1,很巧的是这个标志点正好对应了实轴为0的时候的所有二元数,所有实轴为正的二元数都被投影到了这两个标志点划分出的线段内部。但是在二元数的旋转过程中,最好理解的可能是初始点,也就是虚部全为0的二元数,演示网站中随着单位圆的旋转,初始点不断移动,投影位置也从0变为1然后到无穷,后来又回复到-1最后回到原来位置。

在三元数旋转中标志点就很好用了,三元数旋转,选择所有实轴为0的点组成的圆作为标志物,所有实轴为正的三元数都会投影到圆内部,而实轴为负数的点就会投影到圆的外部。这个圆就是标志,旋转一定角度之后,圆的投影位置就会发生变化,初试状态如下图,右上角的图表示二维空间的投影情况,为了方便区分,每个八分之一球面都换了颜色,可以根据对应颜色已经圈内圈外表示投影。

旋转一定角度之后,变成下面的情况:

变成这个情况下,单位球的位置相对于初始位置发生了一定的旋转,暂且不管是如何旋转的,直观的感受就是求绕着实轴顺时针旋转了一定的角度,按照球极投影的方法,平面上的投影就变成了右上角的情况,而标志的黄色圆也在不断变大,最终边到下面这个情况:

这表示旋转了一定角度之后,之前的标志现在投影变成了一条线,平面刚好对称变换了一次。

那么对于四元数,我们选择的标志点就是所有实轴为0的点,组成的就应该是一个单位球,实轴为正在球的内部,实轴为负则在球的外部。由于四维空间人无法想象,但是现在可以得到三维空间的投影,既然关系是一一对应,那我们现在反过来,看三维空间的投影,不看四维空间的变化,而是看四元数的变化,这样三维的球体进行旋转,反应在四元数的值上是怎样一个变化,用这个变化的规律不就可以表示出三维物体的旋转了。

单独调节ijk三个轴对应的数值,可以发现在i轴数值从-1一点点变为1的过程中,球体相当于绕i轴进行旋转,同理jk两个轴的变化也可以看作旋转。到这一步其实不深究的话对四元数的理解就已经足够了,四元数建立了一个三维空间和四维空间的一一对应,即三维单位球和单位四元数之间的一一对应,这样就可以用四元数去反映三维空间的位置姿态,而具体这个变化是怎样变化的,就按照下面的步骤:

这里根据步骤在补充一下,采用把三维坐标写作纯四元数,其实是给这个纯四元数一个模糊的维度,因为这个纯四元数可以说是四维的,也可以看作一个特殊的三维。为了方便理解,我们假设一个纯三元数,也就是实部为0的一个三维坐标,这个纯三元数就是一个虚轴组成平面上的一个点,但也可以看作是三维空间中的一个点,去掉0对应的维度在二维空间上还是同一个点。采用这种方式,去将三维坐标放在四维空间之下。
四元数运算采用这种两次运算的方式,是因为任意的四维旋转都可以唯一的拆分为一个左旋转和一个右旋转,表达出来就是qLpqR,采用这种方式计算到最后,结果依然是一个纯四元数,这样将实部去掉,又可以恢复为初试的三维坐标,完美展现了旋转。
另外,旋转角度到四元数的转换过程中采用半角,直白地说是因为采用了两次旋转,每次旋转都是旋转了一半,所以是半角。

四元数中的每个数都是经过“处理”的旋转轴和旋转角,轴角描述的“四元组”并不是一个空间下的东西,首先(ax,ay,az)是一个3维坐标下的矢量,而theta则是极坐标下的角度,简单的将他们组合到一起并不能保证他们插值结果的稳定性,因为他们无法归一化,所以不能保证最终插值后得到的矢量长度(经过旋转变换后两点之间的距离)相等,而四元数在是在一个统一的4维空间中,方便归一化来插值,又能方便的得到轴、角这样用于3D图像的信息数据,所以用四元数再合适不过了。相比于矩阵,四元素也只要存储4个浮点数,优势很明显。

最后做个总结,采用四元数去表示三维空间的旋转,本质上是因为四元数和三维坐标之间一一对应的一个关系,用四元数表示旋转不会出现欧拉角那样的万象锁问题,因为四个轴的存在,每个位置都有与之对应的四元数表示。在使用四元数表示旋转时,首先根据旋转轴和旋转角度写出旋转四元数q,将要旋转的坐标写作纯四元数的形式,用公式qLpqR计算结果,结果就是旋转之后的坐标对应的纯四元数,去掉实轴的数值,剩下的就是三维坐标旋转后的结果。

参考链接:
四元数的可视化:https://www.bilibili.com/video/BV1SW411y7W1
四元数和四维转动:https://www.bilibili.com/video/BV1Lt411U7og/?spm_id_from=333.788.recommend_more_video.-1
四元数互动视频:https://eater.net/quaternions
四元数解释:https://www.zhihu.com/question/23005815

关于四元数的个人理解相关推荐

  1. 关于四元数的终极理解

    *前言:之前看了好多关于四元数的概念和推导,就是有点搞不懂,今天在总结回顾了一下,一下恍然大悟,现将我的理解写下来,保证你一看就懂 注意:推导过程看书吧,这里重点是将四元数模型化,让你更容易记住和理解 ...

  2. 关于使用旋转四元数绕轴旋转θ角度时,使用参数是θ/2的理解

    3D点A=(Xa,Ya,Za)绕轴N=(Nx,Ny,Nz)旋转θ角度.将点A扩展到四元数空间,则A=(0,Xa,Ya,Za),此时A点纯四元数(即第一位W分量等于0),处于四维空间中的一个超三维平面上 ...

  3. 四元数入门(简单容易理解)

    本文参考网上的一些文章,进行了一些整理和注释.理解了下面的main函数执行的过程基本就能理解四元数的大致过程. 以下是内容: 四元数常常可以在3D的书上看到. 但我的那本3D图形学书上,在没讲四元数是 ...

  4. 可视化理解四元数,愿你不再掉头发

    点击"计算机视觉life"关注,置顶更快接收消息! 本文阅读时间约8分钟 四元数的可视化 四元数被广泛应用在计算机图形学领域,游戏引擎Unity也是用四元数在后端计算旋转.数学上, ...

  5. 万向锁的理解 欧拉角 四元数

    1 欧拉角&万向锁 欧拉角和万向锁 视频资料理解万向锁 核心是嵌套 以一个三自由度的机械臂为例,三个旋转轴互相垂直,相当于x,y,z轴 三个机械臂通过旋转关节依次串联,定义第一个关节旋转轴为J ...

  6. 【飞控理论】【惯性导航基础】二维平面的旋转如何用代数表示?三维平面的旋转如何用代数表示?什么是四元数?四元数、欧拉角、方向余弦之间有什么关系?

    上一篇欧拉角 由于欧拉角在描述三维空间物体旋转问题时存在万向节死锁问题(详情戳这里),所以引入四元数概念. 目录 1.二维平面的旋转 2.三维平面的旋转(什么是四元数) 3.<捷联惯性导航> ...

  7. 欧拉角万向节死锁与四元数的相关资料

    欧拉角和四元数都可以用来描述物体的姿态.欧拉角的万向节死锁理解稍微奇怪.四元数原理的理解较为复杂.欧拉角和四元数之间可以做转换.这里收集了若干资料已做备忘. 万向节死锁(Gimbal Lock) : ...

  8. 迭代最近点(Iterative Closest Point, ICP)算法及matlab实现

    前言 通常,使用RGB-D相机或是其他方法获取到物体的三维点云后,由于采集设备不同.拍摄视角不同等等因素的影响,即使是同一个物体所得到的点云也会有较大的差异,主要是旋转或者平移的变化.对于一组图像数据 ...

  9. 【飞控理论】【惯性导航基础】什么是欧拉角?为什么会有欧拉角?欧拉角在航空领域的运用?

    目录 1.什么是欧拉角 2.为什么会有欧拉角? 3.欧拉角在航空领域的运用? 3.1.欧拉角的顺序问题 3.2.运载体坐标系和世界坐标系 1.什么是欧拉角 假设坐标系从 OXY 绕 Z 轴负方向逆时针 ...

最新文章

  1. Linux文件目录类命令
  2. AJAX代码示例(不使用AJAX控件)
  3. 5个须警惕的数据库设计错误
  4. 用 Docker Machine 创建 Azure 虚拟主机
  5. 商用服务器系统比较好,商用服务器操作系统都用哪种
  6. vue怎么编辑已有视频_手机制作短视频、VLOG用啥App?~~
  7. Kafka : 查看kafka topic的消息offset范围
  8. 逐帧动画 and 有限状态机(fsm)
  9. Android自定义 view之图片裁剪从设计到实现
  10. iOS 网络https传输
  11. 矩阵卷积运算过程讲解
  12. N卡自带录屏软件geforce 双屏录制问题
  13. HTML如何剪切图片,css如何截取图片?
  14. 学生综合素质评价系统c语言,学生综合素质评价表自我评价范文(2)
  15. Angular2+ 双向数据绑定
  16. PHP strtoupper函数解析
  17. 使用Python将mat文件转换为npy文件
  18. java如何解压rar文件怎么打开,Java压缩与解压rar文件
  19. 编译原理实验二 自上而下的语法分析器(算术表达式)
  20. unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)

热门文章

  1. 帝国列表页分开调取年份和月份单独调用的方法?
  2. OC中对象的description方法
  3. 安装Android SDK时,点击SDK Manager.exe闪退,并且jdk的环境变量是对的。
  4. .NET 3.5 : 读写RSS或者ATOM
  5. AbstractQueuedSynchronizer源码
  6. @EnableWebMvc启动springmvc特性
  7. eclipse class 中无法打断点
  8. 数据库设计需要注意什么
  9. grafana 安装- 曲线图展示每秒新增数据量
  10. android studio 3.0 安装配置