目录仿射变换 vs 线性变换为什么平移不属于线性变换目录1. 一句话结论2. 线性变换的定义与几何意义2.1 数学定义2.2 几何意义2.3 线性变换的几何约束3. 平移变换为什么不是线性的3.1 用定义检验平移3.2 几何上的根本原因原点被挪走了4. 仿射变换线性变换的升级版4.1 定义4.2 仿射变换的几何意义4.3 仿射变换包含哪些操作5. 线性变换 vs 仿射变换对比表格6. 工程中的解决方案齐次坐标6.1 核心思想升维打击6.2 为什么能行6.3 4x4变换矩阵的结构7. 机器人/自动驾驶中的应用实例7.1 例子机器人移动7.2 例子传感器外参标定7.3 例子点云变换8. 总结一张图记住区别1. 一句话结论平移不属于线性变换因为它不满足线性变换的两个基本规则不能保证原点固定不能保证向量加法的一致性。平移属于仿射变换——仿射变换 线性变换 平移。工程解决方案通过引入齐次坐标把三维空间升到四维就可以用4x4矩阵统一表示旋转、缩放和平移了。这就是你在SLAM和图形学中永远看到4x4矩阵的原因。2. 线性变换的定义与几何意义2.1 数学定义一个变换T TT被称为线性变换当且仅当它对任意向量u , v \mathbf{u}, \mathbf{v}u,v和任意标量c cc满足两个条件可加性T ( u v ) T ( u ) T ( v ) T(\mathbf{u} \mathbf{v}) T(\mathbf{u}) T(\mathbf{v})T(uv)T(u)T(v)齐次性T ( c u ) c T ( u ) T(c\mathbf{u}) c T(\mathbf{u})T(cu)cT(u)这两个条件合起来就是T ( a u b v ) a T ( u ) b T ( v ) T(a\mathbf{u} b\mathbf{v}) aT(\mathbf{u}) bT(\mathbf{v})T(aubv)aT(u)bT(v)2.2 几何意义在矩阵形式下线性变换可以写成T ( x ) A x T(\mathbf{x}) A\mathbf{x}T(x)Ax其中A AA是一个矩阵x \mathbf{x}x是向量。常见的线性变换旋转绕原点转动缩放放大或缩小剪切沿着某个轴错切反射关于某个轴对称2.3 线性变换的几何约束线性变换有两个非常关键的几何约束原点必须固定不变T ( 0 ) 0 T(\mathbf{0}) \mathbf{0}T(0)0因为T ( 0 ) T ( 0 ⋅ v ) 0 ⋅ T ( v ) 0 T(\mathbf{0}) T(0 \cdot \mathbf{v}) 0 \cdot T(\mathbf{v}) \mathbf{0}T(0)T(0⋅v)0⋅T(v)0网格线保持平行且等距分布直线变换后仍是直线平行线变换后仍然平行原点处的网格线在变换后仍然经过原点3. 平移变换为什么不是线性的3.1 用定义检验平移定义平移变换T ( x ) x t T(\mathbf{x}) \mathbf{x} \mathbf{t}T(x)xt其中t \mathbf{t}t是固定的平移向量。检验条件1可加性T ( u v ) ( u v ) t T(\mathbf{u} \mathbf{v}) (\mathbf{u} \mathbf{v}) \mathbf{t}T(uv)(uv)tT ( u ) T ( v ) ( u t ) ( v t ) u v 2 t T(\mathbf{u}) T(\mathbf{v}) (\mathbf{u} \mathbf{t}) (\mathbf{v} \mathbf{t}) \mathbf{u} \mathbf{v} 2\mathbf{t}T(u)T(v)(ut)(vt)uv2t除非t 0 \mathbf{t} \mathbf{0}t0否则两者不相等 ❌检验条件2齐次性T ( c u ) c u t T(c\mathbf{u}) c\mathbf{u} \mathbf{t}T(cu)cutc T ( u ) c ( u t ) c u c t c T(\mathbf{u}) c(\mathbf{u} \mathbf{t}) c\mathbf{u} c\mathbf{t}cT(u)c(ut)cuct除非c 1 c1c1或t 0 \mathbf{t}\mathbf{0}t0否则两者不相等 ❌检验条件3原点T ( 0 ) 0 t t ≠ 0 T(\mathbf{0}) \mathbf{0} \mathbf{t} \mathbf{t} \neq \mathbf{0}T(0)0tt0除非t 0 \mathbf{t}\mathbf{0}t0否则原点被挪走了 ❌3.2 几何上的根本原因原点被挪走了最直观的理解线性变换要求原点固定不动。你可以旋转坐标系、放大缩小但原点的位置不能变——它永远是(0,0,0)。但平移的本质就是把整个空间连同原点一起挪动。一旦原点移动了变换就不再是线性的了。打个比方线性变换你站在原点可以转圈旋转、可以踮脚缩放、可以歪着身子剪切但你的脚始终踩在原点上。平移你直接向前走了一步脚离开了原点。这就是根本区别。4. 仿射变换线性变换的升级版4.1 定义仿射变换是线性变换和平移的组合T ( x ) A x t T(\mathbf{x}) A\mathbf{x} \mathbf{t}T(x)Axt其中A AA是矩阵线性部分t \mathbf{t}t是向量平移部分。4.2 仿射变换的几何意义仿射变换保持了直线的直线性直线变换后仍是直线平行性平行线变换后仍然平行比例性直线上点的比例关系保持不变但不保证原点固定也不保证向量加法的保持。4.3 仿射变换包含哪些操作操作是否属于仿射变换是否属于线性变换旋转✅✅缩放✅✅剪切✅✅反射✅✅平移✅❌刚体变换旋转平移✅❌相似变换旋转缩放平移✅❌5. 线性变换 vs 仿射变换对比表格对比维度线性变换仿射变换数学形式T ( x ) A x T(\mathbf{x}) A\mathbf{x}T(x)AxT ( x ) A x t T(\mathbf{x}) A\mathbf{x} \mathbf{t}T(x)Axt原点固定✅ 必须固定❌ 可以移动保持直线✅✅保持平行✅✅保持比例✅✅可加性✅T ( u v ) T ( u ) T ( v ) T(uv)T(u)T(v)T(uv)T(u)T(v)❌ 一般不成立齐次性✅T ( c u ) c T ( u ) T(cu)cT(u)T(cu)cT(u)❌ 一般不成立包含的操作旋转、缩放、剪切、反射线性变换 平移6. 工程中的解决方案齐次坐标既然平移如此重要机器人总要移动的而线性变换又无法表示平移怎么办答案是升维打击——引入齐次坐标。6.1 核心思想升维把三维空间中的点( x , y , z ) (x, y, z)(x,y,z)用四维空间中的点( x , y , z , 1 ) (x, y, z, 1)(x,y,z,1)来表示。这样一个4x4的矩阵就可以同时表示旋转、缩放和平移了[ x ′ y ′ z ′ 1 ] [ R 11 R 12 R 13 t x R 21 R 22 R 23 t y R 31 R 32 R 33 t z 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} \begin{bmatrix} R_{11} R_{12} R_{13} t_x \\ R_{21} R_{22} R_{23} t_y \\ R_{31} R_{32} R_{33} t_z \\ 0 0 0 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}​x′y′z′1​​​R11​R21​R31​0​R12​R22​R32​0​R13​R23​R33​0​tx​ty​tz​1​​​xyz1​​6.2 为什么能行在四维空间中我们可以设计一种特殊的错切变换使得它在投影回三维空间时恰好表现为平移。通俗理解四维空间中的错切 → 投影回三维 → 就是平移这就像把一个二维正方形在三维空间中斜着推它的影子在地面上平移了一样6.3 4x4变换矩阵的结构矩阵块作用左上3x3旋转、缩放、剪切线性部分右上3x1平移左下1x3透视变换一般为[0 0 0]右下1x1整体缩放一般为1这就是为什么你在计算机图形学、机器人学、SLAM中永远看到的都是4x4矩阵。7. 机器人/自动驾驶中的应用实例7.1 例子机器人移动机器人从位姿P 1 P_1P1​移动到P 2 P_2P2​先旋转线性变换再平移仿射变换在代码中我们用一个4x4变换矩阵表示这个运动Eigen::Isometry3d TEigen::Isometry3d::Identity();T.rotate(rotation_matrix);// 旋转T.pretranslate(translation_vector);// 平移// 对点进行变换Eigen::Vector3d transformed_pointT*original_point;7.2 例子传感器外参标定把激光雷达坐标系下的点变换到车体坐标系p b o d y R l i d a r b o d y ⋅ p l i d a r t l i d a r b o d y p_{body} R_{lidar}^{body} \cdot p_{lidar} t_{lidar}^{body}pbody​Rlidarbody​⋅plidar​tlidarbody​这就是一个典型的仿射变换刚体变换用4x4齐次矩阵统一表示为p b o d y T l i d a r b o d y ⋅ p l i d a r p_{body} T_{lidar}^{body} \cdot p_{lidar}pbody​Tlidarbody​⋅plidar​7.3 例子点云变换把一帧点云从局部坐标系变换到全局地图坐标系for(autopoint:pointcloud){// 用4x4变换矩阵进行仿射变换pointT*point;// 旋转平移一步完成}8. 总结一张图记住区别线性变换 T(x) Ax 原点固定可以旋转缩放但不能移动 ↓ 加上平移向量 t ↓ 仿射变换 T(x) Ax t 可以旋转缩放也可以移动 ↓ 引入齐次坐标 ↓ 4x4矩阵 T(x) Mx 用一个矩阵统一表示旋转、缩放、平移一句话记法线性变换管旋转缩放仿射变换再加平移齐次坐标升维打击4x4矩阵一统江湖。在机器人及自动驾驶中我们99%的时间都在用仿射变换并且用齐次坐标下的4x4矩阵来实现。因为机器人既要转线性也要走平移——两者缺一不可。技术深度关于变换矩阵在SLAM中的更多应用如位姿图优化、李群李代数等我在《机器人工程师带你入门SLAM》专栏中有从理论到工程的完整讲解欢迎点击查看了解。