当前位置: 首页 > article >正文

【空间变换】欧拉角与四元数

核心

  1. 欧拉角描述的是一种变换,只关注变换后的结果,不关注变换过程中的运动
    四元数不仅良好地表示了一种变换,也很好地表示了一种运动过程,又避免了万向节死锁Gimbal Lock
  2. 变换顺序,是欧拉角变换的一部分,仅仅说明三个轴的角度是不完整的;在用欧拉角说明某一个物体的姿态时,一定要加上先后顺序
  3. 无论是欧拉角还是四元数,它们都只描述旋转,不包含任何拉伸平移

从低维开始

参考3B1B的四元数视频
在复频域分析中,我们常见的 j j j 或者 i i i 其实就是一种旋转表示
e π i e^{\pi i} eπi 表示绕某一个轴旋转180°
即:(欧拉公式,可从三角函数推得) e i θ = s i n θ + i c o s θ e^{i \theta} = sin\theta + icos\theta eiθ=sinθ+icosθ
令: w = s i n θ w = sin\theta w=sinθ, x = c o s θ x = cos\theta x=cosθ
进而: e i θ = w + x i e^{i \theta} = w + x i eiθ=w+xi
也就是说,我们用两个量描述了一个在二维平面中的旋转,但是这两个量满足某种约束关系(本质上是一个量分解出的两个量,用一维的量描述了二维的旋转)
举例来说, 0 + 1 i 0+1i 0+1i表示逆时针旋转90°, 2 2 − 2 2 i \frac{\sqrt2}{2}-\frac{\sqrt2}{2}i 22 22 i表示顺时针旋转45°


进入高维

就像常规复数描述二维旋转时,一个二维单位圆覆盖了整个一维空间,一个三维单位球覆盖了整个二维空间,同样的,一个四维的单位超球也会覆盖整个三维空间;
相应的,我们用一维量描述二维旋转,用二维量描述三维旋转,那么我们用三维量描述四维旋转就合乎情理了
事实上,四元数描述的是四维中单位超球的旋转,三维坐标系的原点是 1 + 0 i + 0 j + 0 k 1+0i+0j+0k 1+0i+0j+0k,这是由超球的投影决定的,球上的该点投影下来,正好落在原点处
对于四元数来说:
q = w + x i + y j + z k q = w+xi+yj+zk q=w+xi+yj+zk
w ∈ [ 0 , 1 ] ,    x , y , z ∈ [ − 1 , 1 ] w∈[0, 1], \ \ x, y, z∈[-1, 1] w[0,1],  x,y,z[1,1]的部分(正实部的部分)被映射到了三维坐标系中的单位球中,其他部分(负实部的部分)映射到了三维单位球以外的空间

但请时刻记住:无论这个四元数的点映射到三维空间的哪里,它原本所在的位置都是那个四维单位超球,满足 w 2 + x 2 + y 2 + z 2 = 1 w^2+x^2+y^2+z^2=1 w2+x2+y2+z2=1
此外,等价于普通复数的虚轴表示二维中的一个圆,在四元数中, i , j , k i, j, k i,j,k 每个轴都代表超球上的一个圆环,进一步的,三维中的每一个平面,都代表了超球上的一个球面


四元数运算

运算的本质

让我们回忆一下文章开头所讲的:
四元数不仅是变换,也是一种状态

因此,四元数乘法可以类比于矩阵向量运算
当两个四元数相乘时,可以认为是一个四元数状态应用了另一个四元数变换,从而得到下一个四元数状态
换而言之,变换将状态量的四个分别应用了该变换,再重新组成了新的状态量

对应的几何含义

四元数变换所描述的旋转方向符合右手螺旋定则
举例来说:右手拇指从1指向 i ,当应用 i 变换时,jk圆会绕着手指蜷曲的方向旋转;
推广:右手拇指从1指向变换四元数,当应用该变换时,垂直于该四元数向量的圆会绕着手指蜷曲的方向旋转

每应用一次单位四元数变换,相当于绕某一个轴旋转90度,连续应用4次就转回来了
由此,我们可以简单得出一个性质:四元数运算不满足乘法交换律


http://www.kler.cn/a/613385.html

相关文章:

  • SQL的核心基础语法 | 快速入门MySQL
  • 【算法手记6】NC1 大数加法 NC40 链表相加(二) NC10 大数乘法
  • java开发环境本地全套
  • Linux-NFS服务的故障排查与优化
  • DATEDIFF 函数
  • 蓝桥Python真题——扫雷
  • 宝塔SSL申请Let‘s Encrypt提示“验证信息构造失败!{}“
  • 【Linux】进程控制和Shell的简易实现
  • 深入剖析Redis分布式锁:Redlock算法源码解读与实战
  • 【学Rust写CAD】15 定点数实现(fixed.rs)
  • Linux文件目录管理指令详解(下篇)
  • C语言之链表增删查改
  • CSS3学习教程,从入门到精通,CSS3 弹性盒子(Flexbox)布局全面指南(20)
  • 一款超级好用且开源免费的数据可视化工具——Superset
  • 前端技术有哪些
  • 微信小程序:数据拼接方法
  • 运维面试题(十一)
  • 明达网关云平台——开启透明化制造新时代
  • VMware Windows Tools 存在认证绕过漏洞(CVE-2025-22230)
  • Yolo_v8的安装测试