一、坐标变换概述

大家好,我是你们的讲师。今天咱们来聊聊坐标变换——这个在机器人、图形学、GIS里无处不在的基础工具。

说实话,我刚入行那会儿,觉得坐标变换就是个数学概念,离实际代码很远。直到有一次做机器人抓取项目,发现机械臂死活抓不准零件……折腾了两天,最后发现是坐标系没对齐。嗯,从那以后,我再也不敢小看它了。

什么是坐标变换?

说白了,坐标变换就是把一个点在不同坐标系下的位置描述,互相转换。

举个例子:你站在教室中间,说「黑板在我前方3米」。但如果你转个身,黑板就在你后方了。同一个黑板,位置没变,只是你的「参考系」变了。坐标变换做的就是这件事——把「黑板在A坐标系下的位置」换算成「在B坐标系下的位置」。

核心公式(二维旋转):

# 二维点 (x, y) 绕原点旋转 θ 角度
x' = x * cos(θ) - y * sin(θ)
y' = x * sin(θ) + y * cos(θ)

这个公式我建议你背下来,后面所有变换都基于它。

为什么需要坐标变换?

你想想看,现实世界里的物体,往往同时存在于多个「坐标系」中:

  • 机器人:机械臂有自己的关节坐标系,摄像头有图像坐标系,世界有全局坐标系
  • 游戏:角色有局部坐标系,场景有世界坐标系,屏幕有像素坐标系
  • 地图:GPS用的是经纬度坐标系,但显示到屏幕上需要投影坐标系

没有坐标变换,这些系统根本没法协同工作。我记得有一次做多传感器融合项目,激光雷达和摄像头的数据对不上——后来发现是两者的坐标系原点差了5厘米。这种坑,踩过一次就记住了。

我的经验:做任何涉及多传感器的项目,第一件事就是画清楚坐标系关系图。别急着写代码,先花半小时把变换链理清楚,能省你后面三天调试时间。

坐标变换的应用领域

坐标变换不是纸上谈兵,它在三个领域尤其重要:

1. 机器人领域

机器人里最经典的场景就是正运动学和逆运动学。

  • 正运动学:知道每个关节的角度,求末端执行器的位置
  • 逆运动学:知道末端执行器的目标位置,反推每个关节的角度

我做过一个六轴机械臂的仿真项目,正运动学就是不断做坐标变换——从基座到关节1,关节1到关节2……一直传到末端。每一步都是一个变换矩阵相乘。

# 二维齐次变换矩阵(平移 + 旋转)
import numpy as np

def transformation_matrix(dx, dy, theta):
    """生成二维齐次变换矩阵"""
    cos_t = np.cos(theta)
    sin_t = np.sin(theta)
    return np.array([
        [cos_t, -sin_t, dx],
        [sin_t,  cos_t, dy],
        [0,       0,     1]
    ])

# 示例:点 (1, 0) 先平移 (2, 3),再旋转 90°
T = transformation_matrix(2, 3, np.pi/2)
point = np.array([1, 0, 1])
result = T @ point
print(f"变换后坐标: ({result[0]:.2f}, {result[1]:.2f})")
# 输出:变换后坐标: (2.00, 4.00)

避坑指南:我曾经在写齐次矩阵时,忘了把点扩展成齐次坐标(加一个1),结果矩阵乘法直接报错。记住:二维点用 (x, y, 1),三维点用 (x, y, z, 1)。

2. 计算机图形学

图形学里,坐标变换是渲染管线的核心。一个3D模型从建模到显示在屏幕上,经历了至少4次变换:

变换阶段 作用 坐标系
模型变换 把模型放到世界场景中 模型坐标系 → 世界坐标系
视图变换 从相机角度观察场景 世界坐标系 → 相机坐标系
投影变换 把3D场景压到2D平面 相机坐标系 → 裁剪坐标系
视口变换 映射到屏幕像素 裁剪坐标系 → 屏幕坐标系

说白了,你看到的每一个3D游戏画面,背后都是坐标变换在「搬砖」。我当年学OpenGL时,被这个管线绕晕过好一阵子。后来自己手写了一个软渲染器,才真正搞明白每一步在干什么。

3. GIS(地理信息系统)

GIS里的坐标变换更「接地气」——地球是椭球体,但地图是平面的。怎么把球面上的经纬度映射到平面?这就是地图投影。

  • 墨卡托投影:航海图常用,但越靠近两极变形越大
  • 高斯-克吕格投影:我国地形图常用,分带投影
  • UTM投影:全球通用,也是分带

我记得有个项目需要把GPS轨迹叠加到卫星图上,结果轨迹和地图对不上——因为GPS用的是WGS84坐标系,而卫星图用的是墨卡托投影。中间少了一步坐标变换,偏差了上百米。

一句话总结:坐标变换就是「在不同参考系之间翻译位置信息」。没有它,机器人抓不准东西,游戏画面会扭曲,地图会错位。

本章知识体系

下面这张图,是我个人习惯用来梳理坐标变换知识结构的。你可以把它当作本章的「地图」:

坐标变换 数学基础 平移/旋转 齐次坐标 核心概念 坐标系定义 变换链 应用领域 机器人 图形学/GIS 核心思想:在不同参考系之间 「翻译」位置信息

嗯,这一章我们先把坐标变换的「是什么」和「为什么」讲清楚。后面几章会深入数学推导和代码实现——到时候我会带着你们手写变换矩阵,从二维到三维,从理论到工程。

记住一句话:坐标变换不是数学题,是工程工具。带着这个心态去学,你会发现它其实很直观。


可可精品资料库