在这里插入图片描述

书籍

在这里插入图片描述

欧式变换

很多同学学数学、学计算机、学深度学习时,总会被一个高频词汇卡住:欧式变换(欧氏变换)

听起来特别高大上,好像是高深的几何公式,但剥开专业外壳,它的本质超级简单,完全是小白能一秒看懂的常识

而且这个知识点超级重要:图片旋转、相机拍照、机器人定位、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}[xy]=[cosθsinθsinθcosθ][xy]+[txty]

公式逐部分大白话解读:

  • θ\thetaθ:物体的旋转角度,负责改变朝向

  • 左侧矩阵:旋转矩阵,核心作用是旋转、且保证图形不变形

  • tx、tyt_x、t_ytxty平移量,负责让物体上下、左右移动

⚠️ 关键:这个公式里没有缩放、没有拉伸参数,所以永远不会变形,完美对应我们前面说的「保形状、保大小」。

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}R3阶旋转矩阵(正交矩阵,核心性质:保距离、保角度)

  • 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}[P1]=[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. 世界坐标系(全局坐标系)
    固定不变的参考系,相当于整个空间的“地面基准”,永远不动。
  2. 自身坐标系(局部坐标系/物体坐标系)
    绑定在物体上,物体旋转、移动,它就跟着一起动

欧拉角:最直观、最符合人类直觉的旋转表示

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(ψ)

单轴基础旋转矩阵:

  1. 绕 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ψ0sinψcosψ0001

  2. 绕 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θ0sinθ010sinθ0cosθ

  3. 绕 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ϕ0sinϕcosϕ

4. 欧拉角优点

  1. 极度直观:三个角度对应我们日常感知的“转头、抬头、翻滚”,人最容易理解、调试、调参。
  2. 数据量小:只用 3 个浮点数 就能描述姿态,存储、传输成本低。
  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=nxsin2αy=nysin2αz=nzsin2α

核心约束:旋转用的四元数必须是单位四元数,满足:
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=qvq

  • v\boldsymbol{v}v:原始三维向量
  • qqq:旋转四元数
  • q∗q^*qqqq 的共轭四元数

4. 四元数优点

  1. 彻底没有万向锁:这是最核心优势,不会出现旋转卡死、丢自由度的问题。
  2. 旋转插值极度平滑:支持球面线性插值(Slerp),两个姿态之间过渡流畅,无抖动、无翻转,是动画、相机运动的首选。
  3. 计算效率高:组合多次旋转、连续姿态更新,计算量远小于矩阵、欧拉角。
  4. 数值稳定性好:没有角度周期性问题,长时间迭代计算(机器人、定位)误差更小。

5. 四元数缺点

  1. 不直观:拿到 [w,x,y,z][w,x,y,z][w,x,y,z] 四个数字,人类无法直接看出物体当前姿态,不能手动快速调参。
  2. 数学门槛略高:四元数乘法、共轭、归一化规则需要额外学习。
  3. 数据维度更高:需要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交互 动态旋转、动画、定位、算法

工程实战:两者如何配合使用?

实际开发中不会二选一,而是组合使用,取长补短,这是行业通用套路:

  1. 输入/交互阶段:用欧拉角
    软件界面、参数配置、手动旋转物体,全部使用欧拉角,方便人理解和操作。
  2. 计算/运算阶段:转为四元数
    代码内部做旋转叠加、姿态插值、运动计算、算法迭代时,统一转换成四元数,规避万向锁、保证平滑。
  3. 输出展示阶段:按需转换
    需要给用户看姿态角度时,再把四元数转回欧拉角显示。

同时补充:三者转换关系
欧拉角   ⟺  \iff 旋转矩阵   ⟺  \iff 四元数
这三种形式在代码里可以互相转换,根据场景自由切换。


在这里插入图片描述

Logo

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

更多推荐