三维旋转 – 四元数的基本概念以及四元数与欧拉角、旋转矩阵的相互转换
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:三维旋转 – 四元数的基本概念以及四元数与欧拉角、旋转矩阵的相互转换
原文链接:https://www.stubbornhuang.com/2126/
发布于:2022年05月12日 21:45:03
修改于:2022年05月16日 16:42:54
1 引言
本文将对四元数的基本概念进行介绍,并将详细介绍四元数与欧拉角、四元数与旋转矩阵之间的相互转换。另外还将介绍如何使用四元数旋转对象,以及以及如何将多个旋转操作连接成一个四元数。
2 四元数的简单表示
一个四元数由四个元素表示:
\tag{1}
其中,q_{0}、q_{1}、q_{2}、q_{3}是实数,而i、j、k是相互正交的虚单位向量。q_{0}称为实分量,而q_{1}、q_{2}、q_{3}称为虚分量。在实际应用过程中(包括在本文中),一般隐藏虚单位向量,使用四个实数表示四元数:
\tag{2}
四元数本身是一个非常复杂的数学理论,在本文中只限于讨论用于3D旋转的四元数。旋转四元数是一种表示三维旋转的机制,可用作3D图形和其他应用程序中旋转矩阵的替代方案,而使用它们不需要了解复数。
旋转四元数与旋转的轴角表示密切相关。因此,我们将从解释轴角表示开始,然后展示如何转换为四元数。
3 3D旋转的轴角表示
根据欧拉旋转定理,可以使用两个参数指定任何3D旋转(或旋转序列),一个参数为定义旋转轴的单位向量,另一个参数为绕该旋转轴的旋转角度\theta,该方式如下图所示
因此,轴角旋转可以用四个数字表示,如下式
\tag{3}
其中,\left (\hat{x} ,\hat{y} ,\hat{z} \right )是定义旋转轴的单位向量,\theta为围绕轴\left (\hat{x} ,\hat{y} ,\hat{z} \right )的旋转角度。
4 轴角与四元数的相互转换
4.1 将轴角转换为四元数
四元数可以使用轴角进行表示,如果已知轴角为\left ( \theta ,\hat{x} ,\hat{y} ,\hat{z} \right ),而四元数如下所示:
\tag{4}
其中,
\tag{5}
\tag{6}
\tag{7}
\tag{8}
从上述方程中我们可以看出,四元数的实数项q_{0}完全是由旋转角度\theta所决定,其余三个虚数项q_{1}、q_{2}、q_{3}是三个旋转轴单位向量按比例缩放共同的比例的结果,这种表示的结果是四元数的大小,即四个分量q_{0}、q_{1}、q_{2}、q_{3}的平方和为1,即
\tag{9}
轴角和四元数都包含了同样的旋转信息,那我们为什么要使用不易理解的四元数呢?因为如果我们要对一个3D对象执行旋转操作,如果使用轴角就要进行较为复杂的三角函数运算,而四元数只需要执行简单的加法、减法、乘法来完成同样的3D旋转,而这在3D渲染这种实时性要求很强的领域可以节省大量的运算耗时,减少开销。
4.2 将四元数转换为轴角
给定四元数q=q_{0} +iq_{1}+jq_{2}+kq_{3},可以使用如下方式将四元数转换为轴角。
首先,需要从q_{0}中提取旋转角度\theta,
\tag{10}
如果\theta不等于0,我们可以得到下面公式得到旋转轴:
\tag{11}
在一种特殊情况下,式11会转换失败。q=(1,0,0,0)称为恒等四元数,在四元数为恒等四元数时不会产生旋转,而当四元数为恒等四元数时,式10得到的\theta角将等于0,在没有旋转的情况下,旋转轴是不确定的,而式11会出现被0整除的问题,所以在实践过程中,必须检测q_{0}是否等于1,如果q_{0}=1,则将\theta设置为0,并且将旋转轴\left ( \hat{x} ,\hat{y} ,\hat{z} \right )设置为(1,0,0)。
需要提出的,将四元数转换为轴角有很多方法,如果看到有转换方法与式10和式11不同,请不要太在意。
5 四元数与旋转矩阵的相互转换
5.1 将四元数转换为旋转矩阵
给定四元数q=q_{0} +iq_{1}+jq_{2}+kq_{3},对应的旋转矩阵为:
q_{0}^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2} & 2 q_{1} q_{2}-2 q_{0} q_{3} & 2 q_{1} q_{3}+2 q_{0} q_{2} \\
2 q_{1} q_{2}+2 q_{0} q_{3} & q_{0}^{2}-q_{1}^{2}+q_{2}^{2}-q_{3}^{2} & 2 q_{2} q_{3}-2 q_{0} q_{1} \\
2 q_{1} q_{3}-2 q_{0} q_{2} & 2 q_{2} q_{3}+2 q_{0} q_{1} & q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2}
\end{array}\right]
\tag{12}
或者
1-2 q_{2}^{2}-2 q_{3}^{2} & 2 q_{1} q_{2}-2 q_{0} q_{3} & 2 q_{1} q_{3}+2 q_{0} q_{2} \\
2 q_{1} q_{2}+2 q_{0} q_{3} & 1-2 q_{1}^{2}-2 q_{3}^{2} & 2 q_{2} q_{3}-2 q_{0} q_{1} \\
2 q_{1} q_{3}-2 q_{0} q_{2} & 2 q_{2} q_{3}+2 q_{0} q_{1} & 1-2 q_{1}^{2}-2 q_{2}^{2}
\end{array}\right]
\tag{13}
这两种方法都适用于四元数转换为对应的旋转矩阵,包括恒等四元数。
5.2 将旋转矩阵转换为四元数
给定旋转矩阵R:
r_{11} & r_{12} & r_{13}\\
r_{21} & r_{22} & r_{23}\\
r_{31} & r_{32} & r_{33}
\end{bmatrix}
\tag{式14}
我们可以通过两个步骤将旋转矩阵转换为四元数。
第1步:得到未定义符号的四元数大小
\tag{式15}
\tag{式16}
\tag{式17}
\tag{式18}
第2步:为了判断正负符号,找到q0,q1,q2,q3的最大值,并且假设其符号为正。然后计算剩余分量,如下所示:
如果q0最大,则
\tag{式19}
\tag{式20}
\tag{式21}
如果q1最大,则
\tag{式22}
\tag{式23}
\tag{式24}
如果q2最大,则
\tag{式25}
\tag{式26}
\tag{式27}
如果q3最大,则
\tag{式28}
\tag{式29}
\tag{式30}
符号不明确的原因是任何给定的旋转都有两种可能的四元数表示。如果一个是已知的,则可以通过对所有四个项取负来找到另一个。这具有反转旋转角度和旋转轴的效果。所以对于四元数,q=\left ( q_{0}, q_{1},q_{2},q_{3} \right )和q=\left ( -q_{0}, -q_{1},-q_{2},-q_{3} \right )表示相同的旋转。
6 四元数与欧拉角的相互转换
6.1 将欧拉角转换为四元数
6.2 将四元数转换为欧拉角
当前分类随机文章推荐
- 旋转矩阵与四元数的转换 阅读6932次,点赞4次
- 三维旋转 - 四元数的基本概念以及四元数与欧拉角、旋转矩阵的相互转换 阅读988次,点赞1次
- 三维旋转 - 欧拉角和旋转矩阵的基本概念以及相互转换 阅读1850次,点赞2次
- 计算机图形学 - 三维空间中的左、右手坐标系旋转矩阵与旋转变换 阅读8403次,点赞4次
- 计算机图形学 - 大白话模型视图投影矩阵(MVP)以及各种变换空间(模型空间、世界空间、相机空间、裁剪空间、屏幕空间) 阅读1516次,点赞1次
- 计算机图形学 - 常用的3D数学知识备忘,如三角函数、向量运算、矩阵运算、图形学常用的平移缩放旋转矩阵,视图矩阵,投影矩阵 阅读1356次,点赞4次
- 计算机图形学 - 3D数学入门之坐标系 阅读1124次,点赞0次
- 矩阵 - 行主序矩阵与列主序矩阵 阅读4064次,点赞0次
全站随机文章推荐
- Duilib - RichEdit作为日志输出控件,更新日志内容后并自动跳到最后一行 阅读2226次,点赞2次
- 资源分享 - Mathematical Basics of Motion and Deformation in Computer Graphics , Second Edition 英文PDF下载 阅读623次,点赞0次
- 资源分享 - GPU Pro 360 - Guide to Geometry Manipulation 英文高清PDF下载 阅读2165次,点赞0次
- OpenCV - 打开视频文件,并对其中的每一帧图像进行Canny算子边缘化提取,并将结果保存为视频文件 阅读3044次,点赞0次
- WordPress - 在每一个文章内容末尾都加一个作者信息展示框 阅读2159次,点赞0次
- 资源分享 - Artificial Intelligence - A Modern Approach , Third Edition 英文高清PDF下载 阅读1993次,点赞0次
- Python - 使用websockets库构建websocket服务器 阅读1692次,点赞0次
- C++ - 智能指针的正确使用方式 阅读615次,点赞0次
- 三维重建 - 基于RBF的三维网格重建 阅读5297次,点赞7次
- 资源分享 - Discrete and Computational Geometry 英文高清PDF下载 阅读1710次,点赞0次
评论
169