首页 > 其他分享 >四元数 学习笔记

四元数 学习笔记

时间:2024-04-20 16:46:05浏览次数:12  
标签:学习 cos mathbf 笔记 四元 bar theta mathrm

License: CC BY-NC-SA 4.0

目录

复数

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

设有复数 \(z_1 = a+b \mathrm{i}, z_2 = c+d \mathrm{i}\),则

\[z_1 z_2 = ac-bd+(bc+ad)\mathrm{i} \]

如果将 \(z_1\) 看作变换, \(z_2\) 看作数,则用线性代数的语言表达就是

\[z_1z_2 = \begin{bmatrix} a & -b \\ b & a \end{bmatrix} \begin{bmatrix} c \\ d \end{bmatrix} \]

我们可以发现,复数相乘这个运算,其实是与 \(\begin{bmatrix} a & -b \\ b & a \end{bmatrix}\) 这个矩阵所代表的变换是等价的.

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

将 \(z_1\) 写成矩阵形式:\(z_1 = \cos(\theta) + \mathrm{i} \sin(\theta) = \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta) \end{bmatrix}\).

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

极坐标表示

\(\exp(\mathrm{i}\theta) = \cos \theta + \mathrm{i} \sin \theta\).

因此对于任意复数 \(z\),我们都能用 \(re^{\mathrm{i}\theta}\) 表示。

不难发现 \(z_1 z_2 = r_1r_2 e^{\mathrm{i}(\theta_1+\theta_2)}\),用人话说就是复数相乘之后模长相乘,角度相加。

三维旋转

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

首先可以将 \(\mathbf{u}\) 分解为平行于 \(\mathbf{v}\) 的分量和垂直于 \(\mathbf{v}\) 的分量。平行的分量转了等于没转,下面考虑 \(\mathbf{u}\) 与 \(\mathbf{v}\) 垂直,且 \(\mathbf u \ne \mathbf 0\) 的情况。

既然是垂直,就回到了平面的情况。但平面需要两个向量来确定,因此我们可以找另一个垂直于 \(\mathbf v\) 的向量:\(\mathbf{w} = \mathbf{v} \times \mathbf{u}\). 不难发现 \(\|\mathbf{w}\| = \|\mathbf{u}\|\),且 \(\mathbf{w}\) 就是 \(\mathbf{u}\) 绕 \(\mathbf{v}\) 逆时针旋转 \(\dfrac{\pi}{2}\) 得到的向量。

现在问题变成了:在平面里,给定 \(\mathbf{z_1}\) 和它逆时针旋转 \(\dfrac{\pi}{2}\) 后的向量 \(\mathbf{z_2}\),求 \(\mathbf{z_1}\) 逆时针旋转 \(\theta\) 后得到的向量。

相信你会做,答案是 \(\cos(\theta) \mathbf{z_1} + \sin(\theta) \mathbf{z_2}\). 将这个结论应用到上面即可。

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

\[\mathbf{u'}=\cos(\theta) \mathbf{u} + (1-\cos(\theta)) (\mathbf{u} \cdot \mathbf{v}) \mathbf{v} + \sin(\theta) (\mathbf{v} \times \mathbf{u}) \]

其中 \(\mathbf{u'}\) 是旋转后的 \(\mathbf{u}\), \(\mathbf{u}\) 是任意向量,\(\mathbf{v}\) 是表示旋转轴的单位向量。

四元数

形如 \(q=a+b \mathrm{i}+ c \mathrm{j} + d \mathrm{k}\),其中 \(a,b,c,d \in \mathbb R\).

全体四元数构成的集合为 \(\mathbb H\).

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

Grassmann 积

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

设 \(q_1, q_2 \in \mathbb{H}\),\(q_1=(a,b,c,d)=(a, \mathbf{v}), q_2=(e,f,g,h)=(e,\mathbf{u})\)(其中 \(\mathbf{v}=\begin{bmatrix} b \\ c \\ d \end{bmatrix}, \mathbf{u}=\begin{bmatrix} f \\ g \\ h \end{bmatrix}\)).

则有

\[q_1 q_2 = (ae-\mathbf{v} \cdot \mathbf{u}, a \mathbf{u} + e \mathbf{v} + \mathbf{v} \times \mathbf{u}) \]

读者自证不难(

纯四元数

实部为 \(0\) 的四元数。

一个性质:设 \(q_1 = (0, \mathbf{v}), q_2 = (0, \mathbf{u})\)

则有

\[\begin{aligned} q_1 q_2 &= (0- \mathbf{v} \cdot \mathbf{u}, 0 + \mathbf{v} \times \mathbf{u}) \\ & = (-\mathbf{v} \cdot \mathbf{u}, \mathbf{v} \times \mathbf{u}) \end{aligned} \]

共轭

三个虚部全部取相反数。四元数 \(q\) 的共轭记作 \(\bar q\) 或 \(q^*\).

和虚数类似,\(q \bar{q}= \|q\|^2\). 证明可以大力展开.

由于 \(q \bar{q} = \|q\|^2\),因此对 \(q \ne 0\),它的逆是 \(\dfrac{1}{\|q\|^2}\bar{q}\).

三维旋转,但是四元数

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

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

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

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

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

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

还是假设 \(u\) 垂直于 \(v\)。

回顾向量乘法的结论,旋转后的向量应该为 \(\cos(\theta) \mathbf{u} + \sin(\theta) \mathbf{v} \times \mathbf{u}\).

观察纯四元数的乘积:\(q_1 q_2 = (-\mathbf{v} \cdot \mathbf{u}, \mathbf{v} \times \mathbf{u})\)

尝试直接将 \(u\) 与 \(v\) 相乘:\(vu = (-\mathbf{v} \cdot \mathbf{u}, \mathbf{v} \times \mathbf{u}) = (0, \mathbf{v} \times \mathbf{u})\),其中后一步是因为 \(\mathbf{u}\) 与 \(\mathbf{v}\) 垂直。

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

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

有没有发现它和复数的极坐标表示很像?事实上的确如此,对单位纯虚四元数 \(v\),有 \(e^{v \theta}=\cos(\theta)+ v \sin(\theta)\).

接下来令 \(q=e^{v \theta}\),我们想要的结果就是 \(qu\).

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

首先还是将 \(u\) 拆成两部分 \(u_\perp\) 和 \(u_\parallel\).

记 \(q=\cos(\theta)+v \sin(\theta)\),\(p=\cos(\theta/2)+v \sin(\theta/2)\). \(p,q\) 均为单位四元数且 \(p^2=q\).

\[\begin{aligned} u' &= u_\parallel + q u_\perp \\ &= pp^{-1}u_\parallel + p^2 u_\perp & (p^2=q) \\ &= p \bar{p} u_\parallel + pp u_\perp & (p^{-1} = \bar{p}) \end{aligned} \]

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

假设 \(v_\parallel\) 为纯四元数,\(q=(\alpha, \beta u)\),其中 \(u\) 为单位向量,\(\alpha, \beta \in R\). 此时若 \(\mathbf{v_\parallel}\) 平行于 \(u\),则 \(v_\parallel q = q v_\parallel\).

假设 \(v_\perp\) 为纯四元数,\(q=(\alpha, \beta u)\),其中 \(u\) 为单位向量,\(\alpha, \beta \in R\). 此时若 \(\mathbf{v_\perp}\) 垂直于 \(u\),则 \(v_\perp q = \bar{q} v_\perp\).

然后继续变形:

\[\begin{aligned} u' &= p \bar{p} u_\parallel + ppu_\perp \\ &= p u_\parallel \bar{p} + p u_\perp \bar{p} \\ &= p (u_\parallel + u_\perp) \bar{p} \\ &= p u \bar{p} \\ &= p u p^{-1} \end{aligned} \]

就得到了一个简洁的式子:\(u'=pup^{-1}\).

矩阵形式

左乘一个四元数 \(q=a+b \mathrm{i} + c \mathrm{j} + d \mathrm{k}\) 有相应的矩阵形式

\[\begin{bmatrix} a & -b & -c & -d \\ b & a & -d & c \\ c & d & a & -b \\ d & -c & b & a \end{bmatrix} \]

旋转的复合

有引理:

\(\forall q_1, q_2 \in H, \bar{q_1} \bar{q_2} = (q_2 q_1)^*\)

于是旋转的复合可以写成 \(q_2 q_1 p \bar{q_1} \bar{q_2} = (q_2 q_1) p (q_2 q_1)^*\)

四元数的插值

咕咕咕……

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

参考资料

Krasjet 的教程

标签:学习,cos,mathbf,笔记,四元,bar,theta,mathrm
From: https://www.cnblogs.com/x383494/p/18147847

相关文章

  • 结构体学习
    /**********************************************************************************************************提高可移植性Copyright(c)[email protected]*******************************************************************......
  • 笔记本重装系统后重装OFFICE(预装的,赠送的)
    笔记本重装系统后重装OFFICE(预装的,赠送的) 1、首先用edge打开bing搜索微软账号,谷歌浏览器也行就是登录微软账号多了一步2、进去后点击服务和订阅那一栏,然后可以看到自己已购买的产品。再选择一个版本进行安装3、确认好语言和版本后直接点安装它会下载好office的安装包。点击安......
  • 拉格朗日插值学习笔记
    拉格朗日插值学习笔记应用众所周知,在平面直角坐标系中,对于任意的\(n\)个点,都一定有一个不超过\(n-1\)次的函数与之相对应。拉格朗日插值适用于求解这\(n\)个点对应的函数。思路考虑给定的\(n\)个点的坐标表示为\((x_i,y_i)\),不难构造出如下函数:\[f(x)=\sum_{i=1}^{n......
  • .NET开源免费的跨平台框架 - MAUI(附学习资料)
    前言前几天分享了一个.NETMAUI开源免费的UI工具包-Uranium,然后技术群有不少同学问.NETMAUI是不是免费的?能做什么?今天特意写这篇文章来介绍一下.NET开源、免费(基于MITLicense)的跨平台框架:MAUI。.NETMAUI官方介绍.NET多平台应用UI(.NETMAUI)是一个跨平台框架,用于使用......
  • 算法中的变形金刚——单纯形算法学习笔记
    目录阅读本文你将会知道线性规划简介线性规划的标准形一般型转标准型<与≤线性规划的松弛形标准型转松弛形单纯形算法基本可行解如何判断最优旋转操作如何通过旋转更新解?退化与布兰德规则基本不可行解单纯形算法的几何意义单纯形算法的时间复杂度分析线性规划问题有更优的做法吗......
  • MVCC学习圣经:一文穿透MySQL MVCC,吊打面试官
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • opencascade官网文档学习之OCCT-Shape healing (3)分析 TopoDS_Shape
    Analysis分析Analysisofshapevalidity形状有效性分析ShapeAnalysis软件包提供了用于分析拓扑形状的工具。在执行修复工具之前,没有必要通过这些工具检查形状,因为这些工具用于在修复工具内部执行修复之前的分析。但是,如果您愿意,这些工具可以独立于修复工具用于检测某些形状问......
  • 数据结构与算法学习(1)——DFS(深度优先搜索)
    DFS基础深度优先搜索算法(英语:Depth-First-Search,缩写为DFS)是一种用于遍历或搜索树或图的算法。这个算法会尽可能深地搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发......
  • gRPC入门学习之旅(七)
    gRPC入门学习之旅(一)gRPC入门学习之旅(二)gRPC入门学习之旅(三)gRPC入门学习之旅(四)gRPC入门学习之旅(五)gRPC入门学习之旅(六)3.6、创建gRPC的桌面应用客户端 1.在VisualStudio2022菜单栏上选择“文件—》新建—》项目”。或者在VisualStudio2022的解决方......
  • FFmpeg开发笔记(十五)详解MediaMTX的推拉流
    ​MediaMTX是个开源的轻量级流媒体服务器,它的安装过程参见《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2 FFmpeg向网络推流”。MediaMTX下载后的压缩包包括可执行程序mediamtx.exe和配置文件mediamtx.yml,看起来非常简约,但它提供的流媒体服务一点也没缩水。双击mediamtx......