四元数 学习笔记

License: CC BY-NC-SA 4.0

复数

在了解四元数之前,要先了解复数对空间干了什么。

设有复数 z1=a+bi,z2=c+di,则

z1z2=acbd+(bc+ad)i

如果将 z1 看作变换, z2 看作数,则用线性代数的语言表达就是

z1z2=[abba][cd]

我们可以发现,复数相乘这个运算,其实是与 [abba] 这个矩阵所代表的变换是等价的.

现在来观察一个单位复数 z1 对坐标系的基底干了什么。

z1 写成矩阵形式:z1=cos(θ)+isin(θ)=[cos(θ)sin(θ)sin(θ)cos(θ)].

因此它将 (1,0) 的基底旋转到了 (cosθ,sinθ),也即逆时针旋转了 θ.

极坐标表示

exp(iθ)=cosθ+isinθ.

因此对于任意复数 z,我们都能用 reiθ 表示。

不难发现 z1z2=r1r2ei(θ1+θ2),用人话说就是复数相乘之后模长相乘,角度相加。

三维旋转

假设三维空间中有一个点 u=(x,y,z),绕一个经过原点的轴 v=(r,s,t) 逆时针旋转 θ. 假定 v=1.

首先可以将 u 分解为平行于 v 的分量和垂直于 v 的分量。平行的分量转了等于没转,下面考虑 uv 垂直,且 u0 的情况。

既然是垂直,就回到了平面的情况。但平面需要两个向量来确定,因此我们可以找另一个垂直于 v 的向量:w=v×u. 不难发现 w=u,且 w 就是 uv 逆时针旋转 π2 得到的向量。

现在问题变成了:在平面里,给定 z1 和它逆时针旋转 π2 后的向量 z2,求 z1 逆时针旋转 θ 后得到的向量。

相信你会做,答案是 cos(θ)z1+sin(θ)z2. 将这个结论应用到上面即可。

于是,我们得到了三维旋转公式:

u=cos(θ)u+(1cos(θ))(uv)v+sin(θ)(v×u)

其中 u 是旋转后的 u, u 是任意向量,v 是表示旋转轴的单位向量。

四元数

形如 q=a+bi+cj+dk,其中 a,b,c,dR.

全体四元数构成的集合为 H.

注意,四元数乘法不符合交换律。

Grassmann 积

如果把四元数的实部单拿出来,就可以写成一个实数和一个三维向量的有序对。

q1,q2Hq1=(a,b,c,d)=(a,v),q2=(e,f,g,h)=(e,u)(其中 v=[bcd],u=[fgh]).

则有

q1q2=(aevu,au+ev+v×u)

读者自证不难(

纯四元数

实部为 0 的四元数。

一个性质:设 q1=(0,v),q2=(0,u)

则有

q1q2=(0vu,0+v×u)=(vu,v×u)

共轭

三个虚部全部取相反数。四元数 q 的共轭记作 q¯q.

和虚数类似,qq¯=q2. 证明可以大力展开.

由于 qq¯=q2,因此对 q0,它的逆是 1q2q¯.

三维旋转,但是四元数

回忆在描述二维旋转的时候,我们对空间做了什么:用复数来描述二维空间里的点,然后用复数乘法来进行旋转。

现在对于四元数,能否拿来主义呢?

第一步是描述三维空间里的点。

对于一个三维空间的点,显然它只能填满四元数的三个维度。剩下的一个维度怎么办?那就空着吧。i,j,k 三个维度一看就有大用,等式 i2=j2=k2=ijk=1 告诉我们这三个维度有高度的对称性,那就只剩下实数维度了。

下面,用一个纯四元数 v 与三维向量 v 相对应: v=(0,v).

现在考虑上文提到的三维旋转问题:将点 u 绕点 v 和原点形成的直线逆时针旋转 θ,求旋转后 u 的位置 u.

还是假设 u 垂直于 v

回顾向量乘法的结论,旋转后的向量应该为 cos(θ)u+sin(θ)v×u.

观察纯四元数的乘积:q1q2=(vu,v×u)

尝试直接将 uv 相乘:vu=(vu,v×u)=(0,v×u),其中后一步是因为 uv 垂直。

还差一个 sin(θ) 的分量,尝试直接乘上,再拼拼凑凑:cos(θ)u+sin(θ)vu=(0,cos(θ)u+sin(θ)v×u) 就是我们想要的结果。

它还可以化简为 (cos(θ)+sin(θ)v)u.

有没有发现它和复数的极坐标表示很像?事实上的确如此,对单位纯虚四元数 v,有 evθ=cos(θ)+vsin(θ).

接下来令 q=evθ,我们想要的结果就是 qu.

现在考虑 u 不垂直于 v 的情况。接下来的化简需要一些注意力(

首先还是将 u 拆成两部分 uu.

q=cos(θ)+vsin(θ)p=cos(θ/2)+vsin(θ/2). p,q 均为单位四元数且 p2=q.

u=u+qu=pp1u+p2u(p2=q)=pp¯u+ppu(p1=p¯)

接下来有两个引理,可以用 Grassmann 积证明.

假设 v 为纯四元数,q=(α,βu),其中 u 为单位向量,α,βR. 此时若 v 平行于 u,则 vq=qv.

假设 v 为纯四元数,q=(α,βu),其中 u 为单位向量,α,βR. 此时若 v 垂直于 u,则 vq=q¯v.

然后继续变形:

u=pp¯u+ppu=pup¯+pup¯=p(u+u)p¯=pup¯=pup1

就得到了一个简洁的式子:u=pup1.

矩阵形式

左乘一个四元数 q=a+bi+cj+dk 有相应的矩阵形式

[abcdbadccdabdcba]

旋转的复合

有引理:

q1,q2H,q1¯q2¯=(q2q1)

于是旋转的复合可以写成 q2q1pq1¯q2¯=(q2q1)p(q2q1)

四元数的插值

咕咕咕……

四元数与旋转矩阵并不一一对应,而是二对一。(qq 代表同一个旋转)

参考资料

Krasjet 的教程

posted @   383494  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示