四元数公式推导

本文深入探讨了三维空间中向量绕轴旋转的数学原理,从向量分解出发,逐步推导出四元数表示下的旋转公式,揭示了四元数与轴角旋转之间的等价性。

在看PhysX源码的时候,看到四元数公式,想知道怎么推导过来的,因为网上一大片帖子都是直接写上这个公式。最主要是纠结公式中角度的一半是如何来的

公式

参考[2] 10.4.3
q = [ c o s ( θ / 2 ) , s i n ( θ / 2 ) n ⃗ ] = [ c o s ( θ / 2 ) , s i n ( θ / 2 ) n x , s i n ( θ / 2 ) n y , s i n ( θ / 2 ) n z ] \begin{aligned} q & = [cos(\theta/2), sin(\theta/2)\vec{n}] \\ & = [cos(\theta/2), sin(\theta/2)n_x , sin(\theta/2)n_y, sin(\theta/2)n_z] \end{aligned} q=[cos(θ/2),sin(θ/2)n ]=[cos(θ/2),sin(θ/2)nx,sin(θ/2)ny,sin(θ/2)nz]

推导

参考[6]直接给出了证明,下面自己推导一遍

三维空间旋转公式

先抛开四元数,我们去求一个三位空间向量绕固定轴旋转之后的向量的公式是什么?也就是参考[2]书中提到的轴-角式旋转。而四元数是跟轴-角式的旋转相关的,先以这个为基础,再去推导四元数的公式会容易理解一些。
和参考[6]一样,用的右手坐标系,主要是用的绘图软件[9],右手坐标系好看点。

设定:

  • 任意向量 v \pmb{v} vvv(向量用粗体小写字母表示)
  • 绕经过原点的旋转轴 u = ( x , y , z ) T \pmb{u} = {(x, y, z)}^T uuu=(x,y,z)T
  • 右手坐标系,绕向量 p m b u pmb{u} pmbu从箭头到原点方向逆时针旋转角度 θ \theta θ
  • u \pmb{u} uuu是单位向量: ∥ u ∥ = x 2 + y 2 + z 2 = 1 \Vert{\pmb{u}}\Vert = \sqrt{x^2 + y ^2 + z^2} = 1 uuu=x2+y2+z2 =1

为了简单起见,看下图所示
在这里插入图片描述

1.向量分解

v \pmb{v} vvv分解为平行于 u \pmb{u} uuu v ∥ \pmb{v}_{\Vert} vvv,和垂直于 u \pmb{u} uuu v ⊥ \pmb{v}_{\bot} vvv
v = v ∥ + v ⊥ \pmb{v} = \pmb{v}_{\Vert} + \pmb{v}_{\bot} vvv=vvv+vvv
分别旋转这两个分向量,再把最后旋转的两个分量相加,得到旋转后的向量 v ′ \pmb{v}^{'} vvv
v ′ = v ∥ ′ + v ⊥ ′ \pmb{v}^{'} = {\pmb{v}_{\Vert}}^{'} + {\pmb{v}_{\bot}}^{'} vvv=vvv+vvv

如下图所示:
向量分解
根据正交投影公式
v ∥ = u . v u . u u = ( u . v ) u ( ∥ u ∥ = 1 ) \begin{aligned} \pmb{v}_{\Vert} &= \frac {\pmb{u}.\pmb{v}}{\pmb{u}.\pmb{u}} \pmb{u} \\ &= (\pmb{u}.\pmb{v})\pmb{u} \qquad (\Vert {\pmb u} \Vert = 1) \end{aligned} vvv=uuu.uuuuuu.vvvuuu=(uuu.vvv)uuu(uuu=1)

因为 v = v ∥ + v ⊥ \pmb{v} = \pmb{v}_{\Vert} + \pmb{v}_{\bot} vvv=vvv+vvv,所以
v ⊥ = v − v ∥ = v − ( u . v ) u \begin{aligned} \pmb{v}_{\bot} &= \pmb v - \pmb{v}_{\Vert} \\ & = \pmb v - (\pmb{u}.\pmb{v})\pmb{u} \end{aligned} vvv=vvvvvv=vvv(uuu.vvv)uuu

接下来分别计算~

2.水平方向 v ∥ \pmb{v}_{\Vert} vvv的旋转

因为平行向量 v ∥ \pmb{v}_{\Vert} vvv u \pmb u uuu旋转任意角度之后还是自身,所以有:
v ∥ ′ = v ∥ {\pmb{v}_{\Vert}}^{'} = \pmb{v}_{\Vert} vvv=vvv

3.垂直方向 v ⊥ \pmb{v}_{\bot} vvv的旋转

三维空间如图所示:
三维空间分向量旋转
用2D的俯视图,会更容易看到清楚,对应于上图的下面一个虚线的圆
2D视图
借助一个向量 w = u × v ⊥ \pmb w = \pmb u \times {\pmb v_{\bot}} www=uuu×vvv
注意:右手坐标系统,叉乘顺序
∥ w ∥ = ∥ u × v ⊥ ∥ = ∥ u ∥ . ∥ v ⊥ ∥ . s i n ( π / 2 ) = ∥ v ⊥ ∥ \begin{aligned} \Vert \pmb w \Vert & = \Vert \pmb u \times {\pmb v_{\bot}} \Vert \\ &= \Vert u \Vert . \Vert \pmb v_{\bot} \Vert . sin(\pi/2) \\ & = \Vert \pmb v_{\bot} \Vert \end{aligned} www=uuu×vvv=u.vvv.sin(π/2)=vvv

v ⊥ ′ \pmb v ^ {'} _ {\bot} vvv分解到 w \pmb w www v ⊥ \pmb v_{\bot} vvv上,可以简单算出来下面的等式
v ⊥ ′ = v v ′ + v w ′ = c o s ( θ ) v ⊥ + s i n ( θ ) w = c o s ( θ ) v ⊥ + s i n ( θ ) ( u × v ⊥ ) \begin{aligned} \pmb v ^ {'} _ {\bot} &= \pmb v^{'}_v + \pmb v^{'}_w \\ & = cos(\theta) \pmb v_\bot + sin(\theta) \pmb w \\ & = cos(\theta) \pmb v_\bot + sin(\theta)(\pmb u \times \pmb v_\bot) \end{aligned} vvv=vvvv+vvvw=cos(θ)vvv+sin(θ)www=cos(θ)vvv+sin(θ)(uuu×vvv)
书上说提到用一点三角学的公式,其实主要是下面的这个三个向量的模都相等。按照投影或者分解,本应该是 v v ′ = c o s ( θ ) v ⊥ ′ \pmb v^{'}_v = cos(\theta) \pmb v^{'}_\bot vvvv

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值