【智能驾驶:视觉感知后处理 阅读笔记】Day2: 数学基础之欧式变换、欧拉角和四元素

书籍

欧式变换
很多同学学数学、学计算机、学深度学习时,总会被一个高频词汇卡住:欧式变换(欧氏变换)。
听起来特别高大上,好像是高深的几何公式,但剥开专业外壳,它的本质超级简单,完全是小白能一秒看懂的常识。
而且这个知识点超级重要:图片旋转、相机拍照、机器人定位、AI特征匹配、游戏建模,底层全靠它撑着。
先记一句话:欧式变换的核心定义
欧式变换 = 不改变形状、不改变大小的空间变换。
就这一句话,搞定80%的知识点。
我们生活在「欧式空间」(最普通、最常规的平直空间),欧式变换就是这个空间里,物体最规矩、最本分的移动方式。
先区分一个核心认知:什么变了?什么没变?
欧式变换中,唯一会变的只有两样:
-
物体的位置
-
物体的朝向
欧式变换中,永远不变的所有东西:
-
物体的长度大小
-
两条线的夹角
-
图形的形状
-
任意两点之间的距离
简单说:东西只是挪了、转了,完全没变形、没缩放、没扭曲,这就是欧式变换。
生活化举例:秒懂欧式变换
举个所有人都能直观感受到的例子:你的手机。
你手里拿着一部长方形的手机:
1. 你把手机从桌子左边,拿到桌子右边 —— 平移
2. 你把手机横着拿、竖着拿、翻转过来 —— 旋转
整个过程里:
手机的长宽没变、四个角的直角没变、机身形状没变、任意两个边角的距离没变。
只有位置和方向变了。
这一整套「平移 + 旋转」的操作,就是完整的欧式变换。
再反向对比,帮你彻底分清:
如果你把手机屏幕拉伸、压扁、放大、扭曲,或者斜着掰变形,这就不是欧式变换了。
欧式变换只包含两种操作(没有第三种)
很多教材讲得很复杂,其实欧式变换归根结底,只有两个基础操作,所有复杂的欧式变换都是二者的组合:
1. 平移:挪位置,不改变方向
物体整体在空间中移动,上下、左右、前后挪动。
没有任何变形,没有角度变化,纯纯换位置。
2. 旋转:改朝向,不挪形变
物体绕着一个点、一个轴转动,面朝的方向变了。
边长、角度、距离全程保持不变。
⚠️ 重点提醒:翻转、镜像严格来说不属于基础欧式变换
核心特质:为什么它叫「保距变换」?
学术上欧式变换还有个名字:保距变换。
大白话翻译:保证距离不变的变换。
这是它最最最核心的本质,也是所有工程、AI用它的原因。
不管物体怎么平移、怎么旋转:
原来相距10cm的两个点,变换后还是10cm;
原来是90°的直角,变换后永远是90°;
原来是等边三角形,变换后永远是等边三角形。
空间结构完全守恒,只有姿态和位置发生改变。
极简数学公式:看懂欧式变换(小白无压力)
前面我们用大白话理解了原理,这一节补上最核心、最简单的数学公式。全程不搞复杂推导,只教你「看懂公式、知道每部分干嘛」。
欧式变换的通用数学定义:由「旋转矩阵 + 平移向量」组成,所有欧式变换都满足这个统一公式。
1. 二维平面欧式变换公式(最常用)
假设平面上任意一个原始点坐标为 (x,y)(x,y)(x,y),经过欧式变换后的新坐标为 (x′,y′)(x',y')(x′,y′),公式如下:
{x′=xcosθ−ysinθ+txy′=xsinθ+ycosθ+ty\begin{cases} x' = x\cos\theta - y\sin\theta + t_x \\ y' = x\sin\theta + y\cos\theta + t_y \end{cases}{x′=xcosθ−ysinθ+txy′=xsinθ+ycosθ+ty
也可以写成简洁的矩阵形式(计算机、代码通用格式):
[x′y′]=[cosθ−sinθsinθcosθ][xy]+[txty]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} + \begin{bmatrix} t_x \\ t_y \end{bmatrix}[x′y′]=[cosθsinθ−sinθcosθ][xy]+[txty]
公式逐部分大白话解读:
-
θ\thetaθ:物体的旋转角度,负责改变朝向
-
左侧矩阵:旋转矩阵,核心作用是旋转、且保证图形不变形
-
tx、tyt_x、t_ytx、ty:平移量,负责让物体上下、左右移动
⚠️ 关键:这个公式里没有缩放、没有拉伸参数,所以永远不会变形,完美对应我们前面说的「保形状、保大小」。
2. 三维空间欧式变换公式(3D/机器人/图形学必备)
我们生活的真实三维空间,欧式变换通用矩阵公式:
P′=RP+t\boldsymbol{P}' = \boldsymbol{R}\boldsymbol{P} + \boldsymbol{t}P′=RP+t
其中:
-
P\boldsymbol{P}P:原始三维点坐标(x,y,z)(x,y,z)(x,y,z)
-
P′\boldsymbol{P}'P′:变换后新坐标
-
R\boldsymbol{R}R:3阶旋转矩阵(正交矩阵,核心性质:保距离、保角度)
-
t\boldsymbol{t}t:三维平移向量 (tx,ty,tz)(t_x,t_y,t_z)(tx,ty,tz)
3. 齐次矩阵写法(工程/代码标准写法)
为了方便计算机计算,会把欧式变换合并成一个4×4齐次矩阵,也是游戏、SLAM、视觉算法的标准公式:
[P′1]=[Rt01][P1]\begin{bmatrix} \boldsymbol{P}' \\ 1 \end{bmatrix} = \begin{bmatrix} \boldsymbol{R} & \boldsymbol{t} \\ \boldsymbol{0} & 1 \end{bmatrix} \begin{bmatrix} \boldsymbol{P} \\ 1 \end{bmatrix}[P′1]=[R0t1][P1]
数学核心结论(看懂就吃透本质):
只要变换可以写成P′=RP+t\boldsymbol{P}' = \boldsymbol{R}\boldsymbol{P} + \boldsymbol{t}P′=RP+t 这种形式,且 R\boldsymbol{R}R 是正交旋转矩阵,它就一定是欧式变换,一定满足:距离不变、角度不变、形状不变。
对比区分:一眼看懂各种变换的区别
很多小白分不清:欧式变换、相似变换、仿射变换、投影变换,这里用最简单的逻辑区分,彻底不混淆。
1. 欧式变换(最严格)
只平移、旋转,大小、形状、距离、角度全不变。
2. 相似变换
可以平移、旋转、整体缩放。形状不变,大小变了。
比如把手机缩小成模型手机,形状一样,尺寸变小,不属于欧式变换。
3. 仿射变换
可以拉伸、倾斜,角度变了,但平行线还是平行线。
比如把正方形拉成平行四边形,不是欧式变换。
4. 投影变换(透视变换)
近大远小、彻底扭曲,相机拍照、透视效果就是它,变形最严重。
现实中哪里在用欧式变换?(超高频场景)
你以为它是抽象数学,其实每天都在接触:
1. 游戏3D建模
游戏里的人物、物体移动、转身,都是欧式变换。物体不会走着走着变形、变大变小,保证画面真实。
2. 机器人、自动驾驶
机器人移动、车头转向、雷达定位,靠欧式变换计算自身位姿,保证空间距离、位置计算精准无误。
3. 计算机视觉、AI图像处理
图像矫正、图片旋转、目标位置匹配,用欧式变换保证物体特征不畸变,AI识别才不会出错。
4. 几何计算、向量运算
我们之前学的点乘、叉乘、法向量计算,全部依托欧式空间的特性(距离、角度守恒),才有稳定的计算结果。
欧拉角 & 四元数
做三维图形、游戏开发、机器人SLAM、计算机视觉、自动驾驶,绕不开的核心问题就是:如何描述物体在空间里的旋转?
日常我们说“抬头、转头、翻身”很好理解,但放到数学、代码里,必须用标准化方式记录旋转姿态。
目前工业界最常用的两种方案:欧拉角 和 四元数。
先搞懂基础:坐标系回顾
在讲旋转之前,先明确两个核心坐标系
- 世界坐标系(全局坐标系)
固定不变的参考系,相当于整个空间的“地面基准”,永远不动。 - 自身坐标系(局部坐标系/物体坐标系)
绑定在物体上,物体旋转、移动,它就跟着一起动。
欧拉角:最直观、最符合人类直觉的旋转表示
1. 通俗理解
欧拉角 = 把任意空间旋转,拆分成「三次绕轴的分步旋转」。
想象你手里拿着一个手机:
- 第一步:绕竖直轴(Z轴) 左右转头(偏航 Yaw)
- 第二步:绕水平横轴(X轴) 抬头低头(俯仰 Pitch)
- 第三步:绕前后轴(Y轴) 左右翻滚(横滚 Roll)
三次简单的轴旋转组合起来,就能模拟出物体在三维空间里任意角度的姿态。这就是欧拉角的核心思想。
2. 三大旋转轴定义(航空/机器人通用标准)
三维空间标准三轴,对应三个欧拉角:
- 偏航角 Yaw(ψ\psiψ):绕 Z轴 旋转,左右转向
- 俯仰角 Pitch(θ\thetaθ):绕 X轴 旋转,抬头/低头
- 横滚角 Roll(ϕ\phiϕ):绕 Y轴 旋转,左右倾斜翻滚
3. 数学表达 & 旋转顺序
欧拉角本质是三个二维旋转矩阵依次相乘。
⚠️ 重点:旋转顺序至关重要(Z-Y-X / X-Y-Z 等),顺序不同,最终姿态完全不一样,工程中必须统一规则。
以最常用的 Z-Y-X 旋转顺序(先偏航、再俯仰、最后横滚)为例,整体旋转矩阵:
R=Rx(ϕ)⋅Ry(θ)⋅Rz(ψ) R = R_x(\phi) \cdot R_y(\theta) \cdot R_z(\psi) R=Rx(ϕ)⋅Ry(θ)⋅Rz(ψ)
单轴基础旋转矩阵:
-
绕 Z 轴旋转 ψ\psiψ
Rz(ψ)=[cosψ−sinψ0sinψcosψ0001] R_z(\psi)= \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(ψ)= cosψsinψ0−sinψcosψ0001 -
绕 Y 轴旋转 θ\thetaθ
Ry(θ)=[cosθ0sinθ010−sinθ0cosθ] R_y(\theta)= \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} Ry(θ)= cosθ0−sinθ010sinθ0cosθ -
绕 X 轴旋转 ϕ\phiϕ
Rx(ϕ)=[1000cosϕ−sinϕ0sinϕcosϕ] R_x(\phi)= \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix} Rx(ϕ)= 1000cosϕsinϕ0−sinϕcosϕ
4. 欧拉角优点
- 极度直观:三个角度对应我们日常感知的“转头、抬头、翻滚”,人最容易理解、调试、调参。
- 数据量小:只用 3 个浮点数 就能描述姿态,存储、传输成本低。
- 交互友好:游戏引擎、建模软件里的旋转滑块,全部基于欧拉角实现,适合手动调整姿态。
5. 欧拉角致命缺点(万向锁)
这是欧拉角最大的硬伤,也是很多场景被迫改用四元数的原因。
万向锁(Gimbal Lock) 通俗解释:
当其中两个旋转轴重合时,三维旋转会丢失一个自由度,原本独立的两个旋转变成“同方向转动”,无法实现空间内任意姿态切换,出现旋转卡死、抖动、异常翻转。
举个例子:手机完全竖直90°抬头后,左右转头和机身翻滚会变成同一个动作,动作失控。
额外短板:
- 不适合插值平滑旋转:两个姿态之间做过渡动画,容易出现轨迹怪异、抖动。
- 旋转计算存在角度周期性(0°和360°等价),数值计算容易出现歧义。
6. 适用场景
适合静态姿态描述、手动调参、粗略姿态展示:
- 3D建模软件、场景编辑器
- 无人机、飞行器粗略姿态显示
- 不需要连续平滑旋转的场景
四元数:工程界主流,解决欧拉角痛点的方案
1. 通俗理解(小白版)
先打破误区:四元数不是“复杂玄学”。
三维空间中,任意旋转都可以等价为:绕某一条固定轴,旋转某一个角度。
四元数就是专门用来描述「绕任意轴旋转一个角度」的数学工具。
你可以简单记:
欧拉角 = 分三步绕三轴转
四元数 = 一步绕任意轴转
2. 四元数基础定义
四元数由 1个实部 + 3个虚部 组成,标准形式:
q=w+xi+yj+zk q = w + x\boldsymbol{i} + y\boldsymbol{j} + z\boldsymbol{k} q=w+xi+yj+zk
简写为四维向量形式:
q=[w, x, y, z]T q = [w,\ x,\ y,\ z]^T q=[w, x, y, z]T
对于单位四元数(专门表示旋转,工程中默认使用),和「旋转轴+旋转角」的转换关系:
设:绕单位向量 n=(nx,ny,nz)\boldsymbol{n}=(n_x,n_y,n_z)n=(nx,ny,nz) 旋转角度 α\alphaα,则:
{w=cosα2x=nx⋅sinα2y=ny⋅sinα2z=nz⋅sinα2 \begin{cases} w = \cos\dfrac{\alpha}{2} \\ x = n_x \cdot \sin\dfrac{\alpha}{2} \\ y = n_y \cdot \sin\dfrac{\alpha}{2} \\ z = n_z \cdot \sin\dfrac{\alpha}{2} \end{cases} ⎩
⎨
⎧w=cos2αx=nx⋅sin2αy=ny⋅sin2αz=nz⋅sin2α
核心约束:旋转用的四元数必须是单位四元数,满足:
w2+x2+y2+z2=1 w^2 + x^2 + y^2 + z^2 = 1 w2+x2+y2+z2=1
3. 核心运算:旋转向量
用四元数对点/向量做旋转,公式:
v′=q⋅v⋅q∗ \boldsymbol{v}' = q \cdot \boldsymbol{v} \cdot q^* v′=q⋅v⋅q∗
- v\boldsymbol{v}v:原始三维向量
- qqq:旋转四元数
- q∗q^*q∗:qqq 的共轭四元数
4. 四元数优点
- 彻底没有万向锁:这是最核心优势,不会出现旋转卡死、丢自由度的问题。
- 旋转插值极度平滑:支持球面线性插值(Slerp),两个姿态之间过渡流畅,无抖动、无翻转,是动画、相机运动的首选。
- 计算效率高:组合多次旋转、连续姿态更新,计算量远小于矩阵、欧拉角。
- 数值稳定性好:没有角度周期性问题,长时间迭代计算(机器人、定位)误差更小。
5. 四元数缺点
- 不直观:拿到 [w,x,y,z][w,x,y,z][w,x,y,z] 四个数字,人类无法直接看出物体当前姿态,不能手动快速调参。
- 数学门槛略高:四元数乘法、共轭、归一化规则需要额外学习。
- 数据维度更高:需要4个浮点数存储,比欧拉角多1个(现代硬件几乎无影响)。
6. 适用场景
几乎所有动态连续旋转场景,工业界首选:
- 游戏角色、相机动画、3D动态场景
- 机器人姿态解算、SLAM、体感设备
- 无人机、AR/VR、运动捕捉
- 需要平滑旋转、连续姿态迭代的算法
欧拉角 VS 四元数 全面对比表
| 对比项 | 欧拉角 | 四元数 |
|---|---|---|
| 数据组成 | 3个角度值 (ψ,θ,ϕ)(\psi,\theta,\phi)(ψ,θ,ϕ) | 4个分量 (w,x,y,z)(w,x,y,z)(w,x,y,z) |
| 直观程度 | 强,符合人类感知 | 弱,无法直观看出姿态 |
| 万向锁问题 | 存在,会丢失自由度 | 不存在,全程稳定 |
| 旋转插值 | 效果差,易抖动、翻转 | 效果极佳,平滑自然 |
| 计算复杂度 | 多次矩阵相乘,运算量大 | 运算简洁,效率高 |
| 手动调参 | 非常方便 | 几乎无法手动调参 |
| 典型用途 | 静态姿态、编辑器、UI交互 | 动态旋转、动画、定位、算法 |
工程实战:两者如何配合使用?
实际开发中不会二选一,而是组合使用,取长补短,这是行业通用套路:
- 输入/交互阶段:用欧拉角
软件界面、参数配置、手动旋转物体,全部使用欧拉角,方便人理解和操作。 - 计算/运算阶段:转为四元数
代码内部做旋转叠加、姿态插值、运动计算、算法迭代时,统一转换成四元数,规避万向锁、保证平滑。 - 输出展示阶段:按需转换
需要给用户看姿态角度时,再把四元数转回欧拉角显示。
同时补充:三者转换关系
欧拉角 ⟺ \iff⟺ 旋转矩阵 ⟺ \iff⟺ 四元数
这三种形式在代码里可以互相转换,根据场景自由切换。

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)