一、坐标变换概述
什么是坐标变换
坐标变换,说白了就是描述同一个点在不同坐标系下的位置关系。你想想看,同样一个物体,站在不同角度去看,它的位置描述肯定不一样。坐标变换要解决的,正是这个「不一样」的问题。
我刚开始接触这个概念时,总觉得它很抽象。直到有一次做机器人项目,需要把摄像头看到的物体位置告诉机械臂去抓取——摄像头有自己的坐标系,机械臂也有自己的坐标系,中间必须做一次变换。嗯,那时候我才真正理解坐标变换的价值。
从数学上讲,坐标变换就是一组映射关系。给定一个点在A坐标系下的坐标,通过某种运算,得到它在B坐标系下的坐标。这个运算可以是平移、旋转、缩放,或者它们的组合。
核心公式:
PB = T × PA
其中PA是点在A系下的坐标,PB是点在B系下的坐标,T是变换矩阵。
坐标变换的应用领域
坐标变换不是纸上谈兵,它在实际工程中随处可见。我挑三个最典型的领域说说。
计算机图形学
你玩的3D游戏、看的动画电影,背后全是坐标变换在支撑。一个三维模型从建模软件到最终显示在屏幕上,经历了多少次变换?我数给你看:
- 模型变换:把物体从局部坐标系放到世界坐标系
- 视图变换:从世界坐标系转换到相机坐标系
- 投影变换:从三维空间投影到二维屏幕
- 视口变换:映射到实际的像素坐标
我曾经做过一个AR应用,需要在手机屏幕上叠加虚拟物体。当时最头疼的就是让虚拟物体跟着手机移动而正确变换位置。调试了整整两天,最后发现是旋转矩阵的乘法顺序搞反了。这个坑,我印象特别深。
机器人学
机器人领域是坐标变换的另一个主战场。一个典型的工业机器人,身上有多个关节,每个关节都有自己的坐标系。要让机器人末端执行器到达指定位置,需要做一系列的正向和逆向坐标变换。
我的经验:做机器人运动学时,建议先用纸笔把各个坐标系画出来,标清楚每个关节的旋转轴和偏移量。别急着写代码,画图能帮你避免80%的错误。
我记得有一次调试六轴机械臂,末端总是差那么几毫米。查了半天,发现是某个关节的DH参数(Denavit-Hartenberg参数)写错了。坐标变换就是这样,一步错,步步错。
地理信息系统(GIS)
GIS里的坐标变换更复杂,因为地球是个椭球体,不是完美的球体。不同地区使用不同的投影坐标系,比如我们国家常用的高斯-克吕格投影。做地图服务时,经常需要在WGS84经纬度坐标和投影坐标之间来回转换。
我之前参与过一个智慧城市项目,需要把不同来源的地图数据叠加在一起。有的数据是北京54坐标系,有的是西安80坐标系,还有的是CGCS2000。不做好坐标变换,这些数据根本对不上。
坐标变换的基本概念
在深入具体变换方法之前,有几个基础概念必须搞清楚。我见过太多人因为概念不清,后面越学越糊涂。
坐标系
坐标系就是用来描述位置的一套参考框架。常见的坐标系有:
| 坐标系类型 | 特点 | 典型应用 |
|---|---|---|
| 笛卡尔坐标系 | 直角坐标,最直观 | 绝大多数场景 |
| 极坐标系 | 用距离和角度描述 | 雷达、声纳 |
| 球坐标系 | 三维极坐标 | GPS、天文 |
| 齐次坐标系 | 增加一个维度,方便矩阵运算 | 计算机图形学 |
这里我要特别提一下齐次坐标系。很多初学者不理解为什么要多一个维度。其实原因很简单——用3×3矩阵无法表示平移变换,但用4×4矩阵就可以。说白了,就是为了把平移和旋转统一成矩阵乘法。
点
点是坐标变换中最基本的元素。一个点就是空间中的一个位置,用一组坐标值表示。在二维空间中用(x, y),三维空间用(x, y, z)。
需要注意一点:同一个物理点,在不同坐标系下有不同的坐标值。这就是坐标变换要解决的问题。
避坑指南:我曾经在项目中把点的坐标和向量的坐标搞混了。点的坐标表示位置,向量的坐标表示方向和大小。虽然它们看起来都是(x,y,z),但变换时处理方式不同——点受平移影响,向量不受平移影响。
向量
向量和点不同,它只有方向和大小,没有位置。在坐标变换中,向量通常用来表示方向、速度、力等物理量。
向量的坐标变换比点简单一些。因为向量不关心位置,所以平移变换对向量没有影响。旋转和缩放则和点一样处理。
我习惯这样区分:点就像地图上的一个标记,向量就像指南针的指向。你移动地图,标记的位置变了,但指南针的指向不变。
知识体系总览
下面这张图展示了本章的知识结构,帮你理清思路:
这张图把本章内容串起来了。你看,坐标变换的核心就是三个部分:它是什么、用在哪、基本概念是什么。后面的章节会逐一深入每个分支。
好了,第一章就到这里。记住一句话:坐标变换不是数学游戏,它是连接不同空间描述的桥梁。搞懂了它,你就能在计算机图形学、机器人学、GIS等领域里游刃有余。