首先介绍一下四元数:
四元数是一种高阶复数,其形式如下:
H = s p a n { 1 , i , j , k } \mathbb{H} = span\{1,i,j,k\} H=span{1,i,j,k}, q = a + b i + c j + d k q = a + bi+cj+dk q=a+bi+cj+dk
其中 i i i, j j j, k k k, 为虚数,其运算方法如下:
i 2 = − 1 i^2 = -1 i2=−1, j 2 = − 1 j^2 = -1 j2=−1, k 2 = − 1 k^2 = -1 k2=−1
i × j = k i \times j = k i×j=k, i × k = − j i \times k = -j i×k=−j, j × k = i j \times k = i j×k=i, j × i = − k j \times i = -k j×i=−k, k × i = j k \times i = j k×i=j, k × j = − i k \times j = -i k×j=−i.
i × 1 i \times 1 i×1 = 1 × i 1 \times i 1×i = i i i, j × 1 j \times 1 j×1 = 1 × j 1 \times j 1×j = j j j, k × 1 k \times 1 k×1 = 1 × k 1 \times k 1×k = k k k
(与向量叉乘较为类似)
q = a + b i + c j + d k q = a + bi +cj +dk q=a+bi+cj+dk 的共轭四元数:
q ∗ = a − b i − c j − d k q ^* = a - bi - cj - dk q∗=a−bi−cj−dk
满足: q q ∗ = a 2 − ( b i + c j + d k ) 2 = a 2 + b 2 + c 2 + d 2 − b c k + b c k − c d i + c d i − b d j + b d j = a 2 + b 2 + c 2 + d 2 = ∣ q ∣ 2 q q^* = a^2 - (bi + cj + dk)^2 = a^2 + b^2 + c^2 +d^2 - bck + bck - cdi + cdi -bdj + bdj = a^2 +b^2 + c^2+d^2 = |q|^2 qq∗=a2−(bi+cj+dk)2=a2+b2+c2+d2−bck+bck−cdi+cdi−bdj+bdj=a2+b2+c2+d2=∣q∣2
其中 ∣ q ∣ |q| ∣q∣ 为 q q q 模长,其定义如下
∣ q ∣ = a 2 + b 2 + c 2 + d 2 |q| = \sqrt{a^2+b^2+c^2+d^2} ∣q∣=a2+b2+c2+d2 ​
两个不同四元数相乘:
q 1 = a 1 + b 1 i + c 1 j + d 1 k q_1 = a_1 + b_1i +c_1j +d_1k q1​=a1​+b1​i+c1​j+d1​k
q 2 = a 2 + b 2 i + c 2 j + d 2 k q_2 = a_2 + b_2i +c_2j +d_2k q2​=a2​+b2​i+c2​j+d2​k
q 1 q 2 = a 1 a 2 − b 1 b 2 − c 1 c 2 − d 1 d 2 + a 1 b 2 i + a 1 c 2 j + a 1 d 2 k + a 2 b 1 i + a 2 c 1 j + a 2 d 1 k + ( c 1 d 2 − c 2 d 1 ) i + ( d 1 b 2 − d 2 b 1 ) j + ( b 1 c 2 − c 1 b 2 ) k q_1q_2 = a_1a_2 - b_1b_2 - c_1c_2 - d_1d_2 + a_1b_2i + a_1c_2j +a_1d_2k + a_2b_1i +a_2c_1j +a_2d_1k +(c_1d_2-c_2d_1)i + (d_1b_2-d_2b_1)j + (b_1c_2-c_1b_2)k q1​q2​=a1​a2​−b1​b2​−c1​c2​−d1​d2​+a1​b2​i+a1​c2​j+a1​d2​k+a2​b1​i+a2​c1​j+a2​d1​k+(c1​d2​−c2​d1​)i+(d1​b2​−d2​b1​)j+(b1​c2​−c1​b2​)k
如果我们将 u ⃗ = ( b 1 i + c 1 j + d 1 k ) \vec u = (b_1i+c_1j+d_1k) u =(b1​i+c1​j+d1​k)和 v ⃗ = ( b 2 i + c 2 j + d 2 k ) \vec v =(b_2i + c_2j +d_2k) v =(b2​i+c2​j+d2​k) 分别视为两个向量,其中 ( i , j , k ) (i,j,k) (i,j,k)构成正交基矢量,则有:
q 1 q 2 = a 1 a 2 − u ⃗ ⋅ v ⃗ + Q ( a 1 v ⃗ + a 2 u ⃗ + u ⃗ × v ⃗ ) q_1q_2 = a_1a_2 - \vec u \cdot \vec v + Q(a_1 \vec v +a_2 \vec u + \vec u \times \vec v) q1​q2​=a1​a2​−u ⋅v +Q(a1​v +a2​u +u ×v )
(其中Q()是将单位向

三维空间中两次旋转等效为一次旋转的计算方法(四元数)相关推荐

  1. 求解三维空间中两向量之间的夹角

    问题描述:已知三维空间中的三个点P1P_1P1​,P2P_2P2​和P3P_3P3​,求向量P1P2→\overrightarrow{P_1P_2}P1​P2​​和P1P3→\overrightarr ...

  2. 向量叉乘求三维空间中两直线(或线段)的交点

    1.2D空间的直线相交 在二维空间中,利用两个直线方程y = kx + b我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点. ...

  3. 三维空间中两直线交点

    文章目录 一.原理概述 二.实现代码 三.实现效果 一.原理概述 为了获取三维空间中的两条相交直线,这里我们采用点向式来表示直线,通过两个点和其法向量来创造直线相交情况,具体操作如下: (1)确定轴向 ...

  4. c语言两字符串转数字后相加,一个觉得很难的C语言问题。对两个数字字符串相加。 C语言 如何把一个字符串中相连的两个数字转化为一......

    导航:网站首页 > 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个字符串中相连的两个数字转化为一... 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个 ...

  5. 2d的公式_旋转之二 - 三维空间中的旋转:罗德里格旋转公式

    接上篇: 复数与2D旋转 先来推导三维空间中的常用旋转公式. 三维空间中的旋转 如果 绕着空间中的一个单位向量 旋转,旋转我们采用右手坐标系: 可以把 分解成平行于 的向量 和 : 绕 旋转并不会造成 ...

  6. 三维空间中曲线绕任意轴旋转所得的旋转曲面求法

    三维空间中曲线绕任意轴旋转所得的旋转曲面求法 对2023汤家凤考研高等数学讲义225页2.三维空间直线旋转曲面的解释和推广 ©️ sylvanding

  7. 三维空间中的两直线相交

    很多资料上提供的两直线相交求点问题一般都是基于二维空间的,而且是直接使用坐标系进行求解.实际上知道二维空间中的求法(使用坐标系进行求解的),要想从中推导到三维空间中的求法是不容易的.在进行几何问题求解 ...

  8. 三维空间碰撞问题;空间中两直线的最短距离及最近点

    已知空间中两线段,如果它们无限变粗,判断是否相交.(主要讨论不在同一平面的情况) 线段AB 线段CD 问题的关键是求出这两条任意直线之间的最短距离,以及在这个距离上的两线最接近点坐标,判断该点是否在线 ...

  9. 三维空间中的旋转--旋转向量

    处理三维旋转问题时,通常采用旋转矩阵的方式来描述.一个向量乘以旋转矩阵等价于向量以某种方式进行旋转.除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧 ...

最新文章

  1. RESTClient 用法
  2. mysql中Invalid default value for 'stime'问题
  3. yarn add yarn global add
  4. HAN:基于双层注意力机制的异质图深度神经网络
  5. Idea使用技巧总结(未完待续)
  6. AMD 发布 Stream SDK for Linux
  7. What can Lines3D Class do?
  8. Docker-compose 安装与基本使用(四)
  9. Docker 开发环境的滑坡
  10. Javascript 处理 JSON 数据 示例
  11. R语言正则表达式[stringr package]
  12. ZT pthread_detach
  13. 自定义MVC框架之工具类-图像处理类
  14. 【ACL2020论文尝鲜】何时采用BERT更加有效?
  15. 数据库基础(1)关系的布尔运算:数据集的并,交,差,补和有效补运算
  16. DOS常用命令(和Linux对比)
  17. linux 6.4 multipath.conf跟其他版本的区别,宏杉与其他厂商存储共用multipath的配置方法...
  18. 使用idea 把项目上传到 svn
  19. ❤️C语言自定义类型的介绍❤️(结构体,枚举,联合体,位段)
  20. 信息安全 —— 密码学

热门文章

  1. TRUE 是零还是一
  2. 圣诞树【Python版】小刘教你画圣诞树
  3. 学习Vue3 第四章(模板语法 vue指令)
  4. uniApp 指纹识别对应代码
  5. VSCODE 比较两份代码
  6. 【BZOJ1061】【NOI2008】志愿者招募
  7. SQL查询in大于1000处理
  8. WebRTC服务器的配置
  9. 通过展开序列ISTA(SISTA)算法创建的递归神经网络(RNN)(Matlab代码实现)
  10. ISTA-NAS: Efficient and Consistent Neural Architecture Search by Sparse Coding