四元数原理学习笔记

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

相关文章

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和