四元数原理学习笔记

2024-03-25 03:38
文章标签 学习 笔记 原理 四元

本文主要是介绍四元数原理学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 四元数的数学性质
        • 定义

四元数的数学性质

定义

1.1:一般形式
q = s + x i + y j + z k s , x , y , z ∈ R \textbf{q} = s + x\textbf{i} + y\textbf{j} +z\textbf{k}\quad s,x,y,z\in\mathbb R q=s+xi+yj+zks,x,y,zR

1.2:虚数单位的运算规则
四元数将复数中的虚数单位扩充为三个,这三个虚数单位的运算规则是:
i 2 = j 2 = k 2 = ijk = − 1 ij = k , jk = i , ki = j \textbf{i}^2=\textbf{j}^2=\textbf{k}^2=\textbf{ijk}=-1\\ \textbf{ij}=\textbf{k},\textbf{jk}=\textbf{i},\textbf{ki}=\textbf{j} i2=j2=k2=ijk=1ij=k,jk=i,ki=j

四元数的这三个虚数单位以及他们的乘法运算很像是三维空间中三个正交单位向量的叉乘的关系:两个正交的单位向量的叉乘等于另一个单位向量,这个单位向量一定与其他两个单位向量都正交。那不妨就将这三个虚数代表三维空间中的三个正交的单位向量。

1.3:四元数的加法和乘法
四元数的加法和乘法可以看作是复数加法和乘法在虚数单位扩充之后的运算。其加法同样满足交换律,乘法满足结合律。

1.4:四元数的乘积一般式
记向量:
a = x a i + y a j + z a k b = x b i + y b j + z b k \textbf{a}=x_a\textbf{i}+y_a\textbf{j}+z_a\textbf{k}\\ \textbf{b}=x_b\textbf{i}+y_b\textbf{j}+z_b\textbf{k} a=xai+yaj+zakb=xbi+ybj+zbk

依照向量的运算法则,点积和叉乘结果如下:
a ⋅ b = x a x b + y a y b + z a z b a × b = ( y a z b − y b z a ) i + ( z a x b − z b x a ) j + ( x a y b − x b y a ) k \textbf{a}\cdot \textbf{b} = x_ax_b+y_ay_b+z_az_b\\ \textbf{a}\times\textbf{b}=(y_az_b-y_bz_a)\textbf{i}+(z_ax_b-z_bx_a)\textbf{j}+(x_ay_b-x_by_a)\textbf{k} ab=xaxb+yayb+zazba×b=(yazbybza)i+(zaxbzbxa)j+(xaybxbya)k

则两个四元数的乘积可以表示为:
q a q b = [ s a , a ] ⋅ [ s b , b ] = [ s a s b − a ⋅ b , s a b + s b a + a × b ] \begin{aligned} \textbf{q}_a\textbf{q}_b & = [s_a,\textbf{a}]\cdot[s_b,\textbf{b}]\\ &= [s_as_b-\textbf{a}\cdot\textbf{b},s_a\textbf{b}+s_b\textbf{a}+\textbf{a}\times\textbf{b}] \end{aligned} qaqb=[sa,a][sb,b]=[sasbab,sab+sba+a×b]

1.5:纯四元数
纯四元数是实部为 0 0 0的四元数
q = [ 0 , v ] \textbf{q}=[0,\textbf{v}] q=[0,v]

两个纯四元数的乘积为
q a q b = [ 0 , a ] ⋅ [ 0 , b ] = [ − a ⋅ b , a × b ] \begin{aligned} \textbf{q}_a\textbf{q}_b&=[0,\textbf{a}]\cdot[0,\textbf{b}]\\ &=[-\textbf{a}\cdot\textbf{b},\textbf{a}\times\textbf{b}] \end{aligned} qaqb=[0,a][0,b]=[ab,a×b]

1.6:单位四元数
对于向量 v v v,其可以写作其长度(范式)乘以一个单位向量
v = ∣ v ∣ v ^ \textbf{v} = |\textbf{v}|\hat{\textbf{v}} v=vv^
其中
∣ v ^ ∣ = 1 |\hat{\textbf{v}}|=1 v^=1
那么一个单位四元数的定义为实部为 0 0 0,虚部的范式为 1 1 1的四元数
q ^ = [ 0 , v ^ ] \hat{\textbf{q}}=[0,\hat{\textbf{v}}] q^=[0,v^]

将单位四元数与复数中的虚数单位作类比,有如下相似表示:
复 数 : z = a + b i 四 元 数 : q = s + v q ^ \begin{aligned} 复数&:&\textbf{z}=a+b\textbf{i}\\ 四元数&:&\textbf{q}=s+v\hat{\textbf{q}} \end{aligned} z=a+biq=s+vq^

1.7:共轭四元数
一个四元数 q \textbf{q} q的共轭即将其虚部向量取反
q = [ s , v ] q ∗ = [ s , − v ] \textbf{q}=[s,\textbf{v}]\\ \textbf{q}^*=[s,-\textbf{v}] q=[s,v]q=[s,v]
再根据1.4节得到的乘积一般式有:
qq ∗ = [ s 2 + v 2 , 0 ] = s 2 + v 2 \textbf{qq}^*=[s^2+\textbf{v}^2,\textbf{0}]=s^2+v^2 qq=[s2+v2,0]=s2+v2
注意这里的 v 2 \textbf{v}^2 v2是指两个向量的点积,等价于 ∣ v ∣ 2 = v 2 = a 2 + b 2 + c 2 |\textbf{v}|^2=v^2=a^2+b^2+c^2 v2=v2=a2+b2+c2,不可将其看作是 ( a i + b j + c k ) 2 (a\textbf{i}+b\textbf{j}+c\textbf{k})^2 (ai+bj+ck)2再用乘法结合律求解。

1.8:四元数的范数
四元数的范数的平方等于实部的平方加上虚部向量的范数,即
∣ q ∣ 2 = s 2 + v 2 = s 2 + v 2 |\textbf{q}|^2=s^2+\textbf{v}^2=s^2+v^2 q2=s2+v2=s2+v2

qq ∗ = ∣ q ∣ 2 \textbf{qq}^*=|\textbf{q}|^2 qq=q2

1.9:四元数的规范化
四元数的规范化定义为将四元数除以它的范数
q ′ = q |q| \textbf{q}'=\frac{\textbf{q}}{\textbf{|\textbf{q}|}} q=|q|q

1.10:四元数的逆
四元数的逆定义为:存在这样一个四元数 q − 1 \textbf{q}^{-1} q1使得以下式子成立:
qq − 1 = [ 1 , 0 ] = 1 \textbf{qq}^{-1}=[1,\textbf{0}]=1 qq1=[1,0]=1
则称这个四元数 q − 1 \textbf{q}^{-1} q1 q \textbf{q} q的逆。可以证明,四元数的逆可以用下列式子计算得到:
q − 1 = q ∗ ∣ q ∣ 2 \textbf{q}^{-1}=\frac{\textbf{q}^*}{|\textbf{q}|^2} q1=q2q

1.11:四元数的点积
四元数的点积等于实部和虚部各个部分分别相乘,其与向量的点积定义相似:
q 1 = [ s 1 , x 1 i + y 1 j + z 1 k ] q 2 = [ s 2 , x 2 i + y 2 j + z 2 k ] \textbf{q}_1=[s_1,x_1\textbf{i}+y_1\textbf{j}+z_1\textbf{k}]\\ \textbf{q}_2=[s_2,x_2\textbf{i}+y_2\textbf{j}+z_2\textbf{k}] q1=[s1,x1i+y1j+z1k]q2=[s2,x2i+y2j+z2k]
则点积结果为
q 1 q 2 = s 1 s 2 + x 1 x 2 + y 1 y 2 + z 1 z 2 \textbf{q}_1\textbf{q}_2=s_1s_2+x_1x_2+y_1y_2+z_1z_2 q1q2=s1s2+x1x2+y1y2+z1z2
利用四元数的点积,仿照向量的点积,我们可以定义两个四元数之间的夹角 θ \theta θ满足:
c o s θ = q 1 q 2 ∣ q 1 ∣ ∣ q 2 ∣ = s 1 s 2 + x 1 x 2 + y 1 y 2 + z 1 z 2 s 1 2 + x 1 2 + y 1 2 + z 1 2 s 2 2 + x 2 2 + y 2 2 + z 2 2 \begin{aligned} cos\theta&=\frac{\textbf{q}_1\textbf{q}_2}{|\textbf{q}_1||\textbf{q}_2|}\\ &=\frac{s_1s_2+x_1x_2+y_1y_2+z_1z_2}{\sqrt{s_1^2+x_1^2+y_1^2+z_1^2}\sqrt{s_2^2+x_2^2+y_2^2+z_2^2}} \end{aligned} cosθ=q1q2q1q2=s12+x12+y12+z12 s22+x22+y22+z22 s1s2+x1x2+y1y2+z1z2
对于单位四元数来说
c o s θ = s 1 s 2 + x 1 x 2 + y 1 y 2 + z 1 z 2 cos\theta=s_1s_2+x_1x_2+y_1y_2+z_1z_2 cosθ=s1s2+x1x2+y1y2+z1z2

这篇关于四元数原理学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843745

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、