三维空间中两次旋转等效为一次旋转的计算方法(四元数)
首先介绍一下四元数:
四元数是一种高阶复数,其形式如下:
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+b1i+c1j+d1k
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+b2i+c2j+d2k
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 q1q2=a1a2−b1b2−c1c2−d1d2+a1b2i+a1c2j+a1d2k+a2b1i+a2c1j+a2d1k+(c1d2−c2d1)i+(d1b2−d2b1)j+(b1c2−c1b2)k
如果我们将 u ⃗ = ( b 1 i + c 1 j + d 1 k ) \vec u = (b_1i+c_1j+d_1k) u =(b1i+c1j+d1k)和 v ⃗ = ( b 2 i + c 2 j + d 2 k ) \vec v =(b_2i + c_2j +d_2k) v =(b2i+c2j+d2k) 分别视为两个向量,其中 ( 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) q1q2=a1a2−u ⋅v +Q(a1v +a2u +u ×v )
(其中Q()是将单位向
三维空间中两次旋转等效为一次旋转的计算方法(四元数)相关推荐
- 求解三维空间中两向量之间的夹角
问题描述:已知三维空间中的三个点P1P_1P1,P2P_2P2和P3P_3P3,求向量P1P2→\overrightarrow{P_1P_2}P1P2和P1P3→\overrightarr ...
- 向量叉乘求三维空间中两直线(或线段)的交点
1.2D空间的直线相交 在二维空间中,利用两个直线方程y = kx + b我们可以直接计算出交点,但是这种方法麻烦了些,并且套用到三维空间用公式就更麻烦了,接下来介绍的是如何利用向量叉乘求出直线交点. ...
- 三维空间中两直线交点
文章目录 一.原理概述 二.实现代码 三.实现效果 一.原理概述 为了获取三维空间中的两条相交直线,这里我们采用点向式来表示直线,通过两个点和其法向量来创造直线相交情况,具体操作如下: (1)确定轴向 ...
- c语言两字符串转数字后相加,一个觉得很难的C语言问题。对两个数字字符串相加。 C语言 如何把一个字符串中相连的两个数字转化为一......
导航:网站首页 > 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个字符串中相连的两个数字转化为一... 一个觉得很难的C语言问题.对两个数字字符串相加. C语言 如何把一个 ...
- 2d的公式_旋转之二 - 三维空间中的旋转:罗德里格旋转公式
接上篇: 复数与2D旋转 先来推导三维空间中的常用旋转公式. 三维空间中的旋转 如果 绕着空间中的一个单位向量 旋转,旋转我们采用右手坐标系: 可以把 分解成平行于 的向量 和 : 绕 旋转并不会造成 ...
- 三维空间中曲线绕任意轴旋转所得的旋转曲面求法
三维空间中曲线绕任意轴旋转所得的旋转曲面求法 对2023汤家凤考研高等数学讲义225页2.三维空间直线旋转曲面的解释和推广 ©️ sylvanding
- 三维空间中的两直线相交
很多资料上提供的两直线相交求点问题一般都是基于二维空间的,而且是直接使用坐标系进行求解.实际上知道二维空间中的求法(使用坐标系进行求解的),要想从中推导到三维空间中的求法是不容易的.在进行几何问题求解 ...
- 三维空间碰撞问题;空间中两直线的最短距离及最近点
已知空间中两线段,如果它们无限变粗,判断是否相交.(主要讨论不在同一平面的情况) 线段AB 线段CD 问题的关键是求出这两条任意直线之间的最短距离,以及在这个距离上的两线最接近点坐标,判断该点是否在线 ...
- 三维空间中的旋转--旋转向量
处理三维旋转问题时,通常采用旋转矩阵的方式来描述.一个向量乘以旋转矩阵等价于向量以某种方式进行旋转.除了采用旋转矩阵描述外,还可以用旋转向量来描述旋转,旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧 ...
最新文章
- RESTClient 用法
- mysql中Invalid default value for 'stime'问题
- yarn add yarn global add
- HAN:基于双层注意力机制的异质图深度神经网络
- Idea使用技巧总结(未完待续)
- AMD 发布 Stream SDK for Linux
- What can Lines3D Class do?
- Docker-compose 安装与基本使用(四)
- Docker 开发环境的滑坡
- Javascript 处理 JSON 数据 示例
- R语言正则表达式[stringr package]
- ZT pthread_detach
- 自定义MVC框架之工具类-图像处理类
- 【ACL2020论文尝鲜】何时采用BERT更加有效?
- 数据库基础(1)关系的布尔运算:数据集的并,交,差,补和有效补运算
- DOS常用命令(和Linux对比)
- linux 6.4 multipath.conf跟其他版本的区别,宏杉与其他厂商存储共用multipath的配置方法...
- 使用idea 把项目上传到 svn
- ❤️C语言自定义类型的介绍❤️(结构体,枚举,联合体,位段)
- 信息安全 —— 密码学