文章目录1、点与坐标系1.1 右手坐标系和左手坐标系1.2 外积和内积1.2.1 外积1.2.2 内积1.3 旋转矩阵1.3.1 一次旋转1.3.2 旋转平移1.3.3 齐次坐标与变换矩阵1.4 旋转向量和欧拉角1.4.1 旋转向量1.4.2 欧拉角Euler Angles1.4.3 欧拉角遇到的问题1.5 四元数1.5.1 概述1.5.2 四元数与旋转1.5.3 角轴与四元数1.5.4 如何用四元数旋转一个空间点1、点与坐标系1.1 右手坐标系和左手坐标系左手坐标系和右手坐标系是三维空间中定义坐标轴方向的两种约定它们的核心区别在于第三个轴通常是 Z 轴的方向。右手坐标系伸出右手四指从 X 轴方向弯向 Y 轴方向此时大拇指指向的方向就是 Z 轴的正方向。在上图中Z 轴指向屏幕外朝向你。左手坐标系同样的动作换成左手。四指从 X 轴弯向 Y 轴大拇指指向的 Z 轴正方向变成了屏幕内远离你。两者的 X 轴和 Y 轴方向完全相同唯一的区别就是 Z 轴的朝向相反。这个差异看起来微小但在实际应用中影响很大——它决定了叉积的方向、旋转的正方向顺时针还是逆时针以及法向量的朝向。常见的使用场景OpenGL、Vulkan、大多数物理和数学教材使用右手坐标系DirectX 和 Unity 使用左手坐标系。在跨系统协作时坐标系不一致是常见的 bug 来源通常需要对 Z 轴取反来做转换。1.2 外积和内积1.2.1 外积外积的定义和公式外积的几何意义1.2.2 内积定义和公式内积的几何意义1.3 旋转矩阵1.3.1 一次旋转坐标系( e 1 , e 2 , e 3 ) (e_{1},e_{2},e_{3})(e1​,e2​,e3​)发生了旋转变成了( e 1 ′ , e 2 ′ , e 3 ′ ) (e^{\prime}_1,e^{\prime}_2,e^{\prime}_3)(e1′​,e2′​,e3′​)向量a aa不动那么它的坐标如何变化因为( e 1 , e 2 , e 3 ) (e_{1},e_{2},e_{3})(e1​,e2​,e3​)是单位向量等式两侧各乘以[ e 1 T , e 2 T , e 3 T ] [e^T_{1},e^T_{2},e^T_{3}][e1T​,e2T​,e3T​]R RR被称为旋转矩阵。可以验证R RR是一个正交矩阵正交矩阵满足Q T Q Q Q T Q^TQQQ^TQTQQQT即它的转置等于它的逆Q − 1 Q T Q^{-1}Q^TQ−1QTR RR的行列式为1。满足这两个性质的矩阵称为旋转矩阵。满足这两个性质的矩阵也可以叫做Special Orthogonal Group 特殊正交群于是1到2的旋转可以表达为a 1 R 12 a 2 a_1R_{12}a_2a1​R12​a2​反之a 2 R 21 a 1 a_2R_{21}a_1a2​R21​a1​矩阵关系R 21 R 12 − 1 R 12 T R_{21}R^{-1}_{12}R^{T}_{12}R21​R12−1​R12T​1.3.2 旋转平移旋转平移a ′ R a t a^\primeRata′Rat两个坐标系间的运动可用R , t R,tR,t完全描述。欧拉旋转定理Euler’s rotation theorem刚体在三维空间里的一般运动可分解为刚体上方某一点的平移以及绕经过此点的旋转轴的转动。1.3.3 齐次坐标与变换矩阵旋转加平移在表达复合情况下有不便之处齐次形式Homogeneous加1之后由3维矩阵变为4维矩阵变换矩阵齐次坐标的性质变换矩阵的集合称为特殊欧氏群 SE(3) Special Euclidean Group。逆形式T − 1 [ R T − R T t 0 T 1 ] T^{-1}\left[\begin{matrix} R^{T} -R^{T}t \\ 0^T 1 \end{matrix}\right]T−1[RT0T​−RTt1​]1.4 旋转向量和欧拉角1.4.1 旋转向量除了旋转矩阵/变换矩阵之外还存在其他的表示方式。旋转矩阵 R 有九个元素但仅有三个自由度。能否以更少的元素表达旋转旋转向量方向为旋转轴长度为转过的角度称为角轴/轴角Angle Axis或旋转向量Rotation Vector。旋转向量与矩阵的不同仅有三个量无约束更直观它们可以是同一个东西的不同表达方式。罗德里格斯公式Rodrigues’s Formula其中R RR是旋转矩阵n nn是旋转向量的方向θ \thetaθ是旋转向量的角度R c o s θ I ( 1 − c o s θ ) n n T s i n θ n ∧ Rcos{\theta}I(1-cos\theta)nn^Tsin{\theta}n^\wedgeRcosθI(1−cosθ)nnTsinθn∧旋转矩阵转向量角度θ a r c c o s ( t r ( R ) − 1 2 ) \thetaarccos(\frac{tr(R)-1}{2})θarccos(2tr(R)−1​)轴R n n RnnRnn1.4.2 欧拉角Euler Angles将旋转分解为三个方向上的转动例按Z-Y-X顺序转动轴可以是定轴或动轴顺序亦可不同常见的有yaw-pitch-roll东北天不同领域的习惯有所不同绕物体的Z轴旋转得到偏航角yaw绕旋转之后的Y轴旋转得到俯仰角pitch绕旋转之后的X轴旋转得到滚转角roll。1.4.3 欧拉角遇到的问题万向锁Gimbal Lock欧拉角的奇异性问题。在特定值时旋转自由度减1。Yaw-pitch-roll顺序下当pitch为90度时存在奇异性。正常情况下面的白色棍状物体为飞机。奇异情况由于万向锁的存在欧拉角不适合插值或迭代。多用于人机交互中。可以证明仅用三个实数表达旋转时不可避免地存在奇异性问题。SLAM中亦很少用欧拉角表达姿态。1.5 四元数1.5.1 概述2D 情况下可用单位复数表达旋转z x i y ρ e i θ zxiy\rho e^{i \theta}zxiyρeiθ乘i ii即转90度乘– i –i–i转-90度。三维情况下四元数可作为复数的扩充。q q 0 q 1 i q 2 j q 3 k qq_0q_1iq_2jq_3kqq0​q1​iq2​jq3​k四元数Quaternion有三个虚部和一个实部虚部之间满足关系{ i 2 j 2 k 2 − 1 i j k , j i − k j k i , k j − i k i j , i k − j \begin{cases} i^2j^2k^2-1 \\ ijk,ji-k \\ jki,kj-i \\kij,ik-j \end{cases}⎩⎨⎧​i2j2k2−1ijk,ji−kjki,kj−ikij,ik−j​自己和自己的运算像复数自己和别人的运算像叉乘。1.5.2 四元数与旋转单位四元数可表达旋转为理解旋转的计算方式先看四元数间如何运算。四元数的运算1.5.3 角轴与四元数四元数到角轴角轴到四元数1.5.4 如何用四元数旋转一个空间点设点p pp经过一次以q qq表示的旋转后得到了p ′ p^{\prime}p′它们关系如何表示将p pp的坐标用四元数表示虚四元数p [ 0 , x , y , z ] [ 0 , v ] p[0,x,y,z][0,v]p[0,x,y,z][0,v]旋转之后的关系为p ′ q p q − 1 p^{\prime}qpq^{-1}p′qpq−1四元数相比于角轴、欧拉角的优势紧凑、无奇异性。