【3D数学】一文看懂四元数 (Quaternion):从直观理解到工程实践
摘要:在 3D 视觉、机器人控制(ROS)和游戏开发中,四元数(Quaternion)是描述旋转的标准工具。相比于欧拉角,它显得抽象且难以理解。本文将摒弃晦涩的复数定义,首先从物理直观出发解释四元数是如何“打包”旋转信息的,随后介绍其数学特性及 Python 工程实现。
1. 直观理解:四元数是如何表示旋转的?
提到四元数,很多人第一反应是“4维复数”、“i2=j2=k2=−1i^2=j^2=k^2=-1i2=j2=k2=−1”。个人觉得比较抽象,对于初学者来说极度不友好,所以请暂时忘掉这些数学定义。
要理解四元数,我们首先要回归 3D 旋转的物理本质——欧拉旋转定理。
1.1 核心模型:轴-角 (Axis-Angle)
在三维空间中,任意一个旋转动作,都可以极其简单地描述为:
“绕着空间中某一个轴 (n⃗\vec{n}n),转动了某一个角度 (θ\thetaθ)。”
这就是理解四元数的钥匙。四元数本质上就是对 轴 (Axis) 和 角 (Angle) 的一种“数学打包”方式。
1.2 封装过程:从物理到数字
假设我们要绕着单位向量轴 n⃗=(nx,ny,nz)\vec{n} = (n_x, n_y, n_z)n=(nx,ny,nz) 旋转 θ\thetaθ 度。
我们不能直接存储 (nx,ny,nz,θ)(n_x, n_y, n_z, \theta)(nx,ny,nz,θ),为了便于后续的数学运算(如乘法叠加),哈密顿设计了如下的“打包规则”,将其转换为 4 个数字 (w,x,y,z)(w, x, y, z)(w,x,y,z):
q=[wxyz]=[cos(θ2)nx⋅sin(θ2)ny⋅sin(θ2)nz⋅sin(θ2)] \mathbf{q} = \begin{bmatrix} w \\ x \\ y \\ z \end{bmatrix} = \begin{bmatrix} \cos(\frac{\theta}{2}) \\ n_x \cdot \sin(\frac{\theta}{2}) \\ n_y \cdot \sin(\frac{\theta}{2}) \\ n_z \cdot \sin(\frac{\theta}{2}) \end{bmatrix} q= </


3万+

被折叠的 条评论
为什么被折叠?



