【图形学】 06 四元数(一)

参考:quaternion.pdf3B1B的视频

1、四元数记法

  一个四元数包含一个标量分量和3D向量分量,有两种记法:
[ w , v ] [ w , ( x , y , z ) ] [w,\textbf{v}]\\ [w,(x,y,z)] [w,v][w,(x,y,z)]

2、复数的共轭(Conjugate)和模长(Magnitude)

  我们有复数 p : p = ( a + b i ) p = (a + bi) p=(a+bi),其共轭表示为:$ p^*=(a-bi)$。这样我们就能更好的计算复数的
∣ ∣ p ∣ ∣ = p p ∗ ∣ ∣ a + b i ∣ ∣ = ( a + b i ) ( a − b i ) = a 2 + b 2 ||p||=\sqrt{pp^*}\\||a+bi||=\sqrt{(a+bi)(a-bi)}\\=\sqrt{a^2+b^2} p=pp a+bi=(a+bi)(abi) =a2+b2

3、复数的乘法

  对于两个复数: z 1 = a + b i z_1 = a + bi z1=a+bi z 2 = c + d i z_2 = c + di z2=c+di相乘,我们可以使用分配律来计算它们的乘积:
z 1 Z 2 = ( a + b i ) ( c + d i ) = a c + a d i + b c i + b d i 2 = ( a c − b d ) + ( b c + a d ) i z_1Z_2=(a+bi)(c+di)\\ = ac + adi + bci + bdi^2\\ = (ac - bd) + (bc + ad)i z1Z2=(a+bi)(c+di)=ac+adi+bci+bdi2=(acbd)+(bc+ad)i
  观察能够轻易发现,复数相乘的结果其实也是一个矩阵与向量相乘的结果,也就是说:
z 1 z 2 = ( a c − b d ) + ( b c + a d ) i = [ a − b b a ] [ c d ] z_1z_2= (ac - bd) + (bc + ad)i\\ =\begin{bmatrix} a & -b\\ b& a\\ \end{bmatrix} \begin{bmatrix} c \\d \end{bmatrix} z1z2=(acbd)+(bc+ad)i=[abba][cd]
  这个式子中,右侧的 [ c d ] \begin{bmatrix}c \\d\end{bmatrix} [cd]是用向量的形式来表示 z 2 z_2 z2,而左侧的 = [ a − b b a ] =\begin{bmatrix}a & -b\\ b& a\\ \end{bmatrix} =[abba]则是用来表示 z 1 z_1 z1 的,所以,“复数和复数的乘法”可以看作,一个复数对另一个复数所进行的拉升变换。也就是对复平面上的一个点进行旋转和缩放~
在这里插入图片描述

  所以,复数相乘其实就是 旋转与缩放变换的复合 。对于一个复数 z = a + b i z=a+bi z=a+bi,结合图像和它与 x 轴的角度 θ \theta θ ,我们就能转换成 缩放矩阵旋转矩阵的形式
在这里插入图片描述
  所以,我们说:对于任意一个复数 z = a + b i z=a+bi z=a+bi ,任何一个复数 v = x + y i v=x+yi v=x+yi 与它相乘,都会被逆时针旋转 θ = a t a n 2 ( b , a ) \theta=atan2(b,a) θ=atan2(b,a)度,并缩放 ∣ ∣ z ∣ ∣ = a 2 + b 2 ||z||=\sqrt{a^2+b^2} z=a2+b2 倍。我们可以构造得到一个等价的复数乘法来表示这样的矩阵变换了:

在这里插入图片描述

4、复数的极坐标型

  根据欧拉公式(Euler’s Formula): c o s ( θ ) + i s i n ( θ ) = e i θ cos(\theta)+i sin(\theta)=e^{i\theta} cos(θ)+isin(θ)=eiθ。对于我们的复数就有:
在这里插入图片描述

  所以,我们有:
在这里插入图片描述

5、三维坐标系的旋转

  假设我们有一个经过原点的(如果旋转轴不经过原点我们可以先将旋转轴平移到原点,进行旋转,再平移回原处)旋转轴 u = ( x , y , z ) T \textbf{u}=(x,y,z)^T u=(x,y,z)T ,我们希望将一个向量 v v v,沿着这个旋转轴旋转 θ \theta θ 度,变换到 v ′ v' v

在这里插入图片描述

  在轴角的表示方法中,一个旋转的定义需要使用到四个变量:旋转轴 u ⃗ \vec{u} u 的 x,y,z 坐标,以及一个旋转角 θ \theta θ,也就是我们一共有四个自由度(Degree of Freedom)。这很明显是多于欧拉角的三个自由度的。实际上,任何三维中的旋转只需要三个自由度就可以定义了,为什么这里我们会多出一个自由度呢?
  其实,在我们定义旋转轴 u ⃗ \vec{u} u 的 x,y,z 坐标的同时,我们就定义了 u ⃗ \vec{u} u 的模长(长度)。然而,通常情况下,如果我们说绕着一个向量 u ⃗ \vec{u} u 旋转,我们其实指的是绕着ū所指的方向进行旋转。回忆一下向量的定义:向量是同时具有大小和方向的量,但是在这里它的大小(长度)并不重要。所以,这里实际上还是只有三个 自由度。

  为了消除旋转轴ū模长这个多余的自由度,我们可以规定旋转轴 u ⃗ \vec{u} u 的模长为 ‖ u ⃗ ‖ = x 2 + y 2 + z 2 = 1 ‖ \vec{u}‖=\sqrt{x^2+y^2+z^2=1} u =x2+y2+z2=1 ,也就是说u是一个单位向量。这样一来,空间中任意一个方向上的单位向量就唯一代表了这个方向。我们其实可以将模长规定为任意的常量,但是规定 ‖ u ⃗ ∣ ∣ = 1 ‖ \vec{u}||=1 u =1能为我们之后的推导带来很多的便利,这也是数学和物理中对方向定义的惯例。

6、四元数和 轴—角 对

  我们以 n 为旋转轴,旋转 θ \theta θ 度。对于四元数的计算:
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 ] \textbf{q}=[cos(\theta/2) sin(\theta/2)\textbf{n}]\\ =[cos(\theta/2) sin(\theta/2)\textbf{n}_x sin(\theta/2)\textbf{n}_y sin(\theta/2)\textbf{n}_z] q=[cos(θ/2)sin(θ/2)n]=[cos(θ/2)sin(θ/2)nxsin(θ/2)nysin(θ/2)nz]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值