坐标变换这事儿,说白了就是拿着尺子去量不同的地图,大家说的尺度不一样,直接比大小肯定不中。就像你在手机上用高德地图看路线,切换到百度地图,随手新点个坐标,心里那股子“哎呀,原来这里跟那不一样”的感觉,就是坐标变换最直观的体现。
不用背啥复杂的矩阵公式,真到了时候,大家脑子里多转一圈,就能把这事儿理顺。 大量时候,我们感觉坐标变了,实际上只是看的角度要么用的尺子换了。
比如你在 Excel 里手动画个图,横着看是 x 轴,竖着看是 y 轴,这时候坐标就是(x, y)。但要是你转头用旋转后拿激光测个点,那个点的物理位置没变,只是你的视线和测量方式变了,坐标就得跟着转。
这种时候,不用苦思冥想公式,试着把那个旋转的棍子头,往原来的棍子方向一靠,再往上提一点点,要么往右挪一格,就能大致对得上。
这时候的变换,实际上是把空间里那个固定的点,拽到了新的参照系下。 下面几个万能公式,看你如何用都像饭搭子,一个比一个实在。 先说二维的旋转,这是大家最熟悉的。
要是你手里一个点坐标是 (x, y),要把它转 45 度,那公式就是 x 加上 y,再乘以 0.707,然后加上一半的 x,最终除以根号二。别听那些书里讲“行列式”,简易版就是直接把原坐标往对角线方向一拉,略微偏一点,就能算出新的位置。
举个例子,假设你有点 (1, 1),照着这招一算,结局变成了 (1.414, 0)。
这跟直觉差不多,你看原点在 (0, 0) 到 (1, 1) 的对角线上,转了 45 度,那点肯定往右上飘,算出来就在斜率 1 的线上,逻辑上是通的。
还有更好办的,要是你只想让 x 坐标正过来,没工夫算根号,那就把原来 x 的偶数项、y 的偶数项加起来,奇数项相减,最终除以 2 要么乘个系数,直接就能套出一个接近正坐标的新值。 再聊聊平移,也就是整体挪个位置。
这就像你在公园里迷路,东西就在原地没动,你只是自己走错了方向。别纠结矩阵乘法,直接拿旧坐标减去一个固定的向量,再扔到新坐标轴上就行。
比如你从 (0, 0) 走到 (5, 10),目前的坐标是 (5, 10)。
要是你换个坐标系统,原点设在 (1, 1),那同样的东西,新坐标就得变成 (4, 9)。千万别去推导这些公式,直接搬个算盘,旧坐标减个向量,扔到新原点上去,新坐标就出来了。
这种变换在实际工作中,比如做 3D 建模的时候,时常就是先把建筑放在 (0, 0, 0),然后到处搬,最终再统一对齐到模型中心,这就是平移的现场版。 线性变换略微复杂点,实际上是旋转加平移的组合拳。
这时候的公式看着吓人,实际上只要把旋转局部拆开,先算间距,再算偏移,最终拼起来就行。
比如一个 3D 场景里的点,要是绕着 Z 轴转 90 度,那 x 轴和 y 轴就互换位置,大小不变。
这时候的变换公式,就是把 y 取反,x 保持不变,再加上那个旋转系数。别认定复杂,本质上就是把空间拆开,先搞清东西向还是南北向,再统一它们。
举个例子,有个点在 (2, 3, 4),绕着 Z 轴转 90 度,新坐标就是 (3, -2, 4)。
注意看,x 和 y 的绝对值没变,只是相对位置变了,z 轴那个高度没动。
这种变换在摄影测量里特别常见,比如卫星图转成倾斜相机图,就是如此一步到位的。 还有旋转 90 度那种更纯粹的,实际上就是把坐标轴顺时针要么逆时针拧一下。
这时候公式就是 x 加 y,再乘以 0.707,然后加上一半的 x,最终除以根号二。别老盯着那些系数,直接想想,把原来的 x 往 y 方向靠,把 y 往 x 方向靠,就能套出那个新坐标。
要是不想算根号,那把原来的 x 乘上 0.707,y 也乘上 0.707,再分别加上自己的一半,最终除以 2,效果差不多,也能拿到相近的坐标结局。
这种变换时常用于把数据从某一列坐标系挪到另一列,只要记住“往对角线靠靠”的直觉,就能快速估算出新坐标。 再说说缩放,这是把格子打碎要么打大的过程。
要是是等比缩放,好办来说就是原来的倍数乘以个比例系数。
比如原来一个格子是 10 个单位,目前变成 5 个单位,那新坐标就是原来的 0.5 倍。
要是是拉伸,那就只是乘以新的比例,不管是啥比例,公式都是新比例乘旧坐标。
举个例子,有个点 (10, 10),要是先等比缩放 0.5,再拉伸 2 倍,那新坐标就是 (1, 1)。先算 10 乘 0.5 等于 5,再乘 2 等于 10,坐标就从 (10, 10) 变到了 (10, 10)?不对,先算 10 乘 0.5 等于 5,再乘 2 是 10,哎,我算错了,应当是 (5, 5)。
这才对嘛,先缩小一半,再拉大两倍,回到原点,多了吗?没多。缩放的核心就是看比例,比例变了,坐标自然跟着变。 要是是透视变换,也就是把近大远小搞了个样,公式略微复杂点,但思路一样。就是把原来的 y 坐标乘以 y 除以 x,再乘以那个缩放系数,加上偏移量。别被那些字母绕晕了,实际上就是把原来的高度拉低,要么把高度拉高。
举个例子,有个点在 (1, 1) 和 (2, 2),要是是透视变换,y 的变化会被 x 拉大。假设 x 从 1 变到 2,y 从 1 变到 2。
这时候新坐标就是 (2, 2) 的 y 局部乘以 2 除以 1,再减去 1。算出来就是 (2, 2)。
这种变换在地图投影里时常用到,比如把纸面地图拉伸成圆形的世界地图,就是如此一步步把坐标算出来的。 最终,异次坐标系转换,这是连坐标都换不了系统的综合体。
这时候只能用近似算法,大约能算出个范围,绝对精度差挺远。
比如从 GPS 的经纬度转成 WGS84,要么从厘米级的激光测距转成毫米级的全站仪坐标。
这时候的公式是先把经纬度转成平面直角坐标,再用不同的比例尺和偏移量,最终再转回去。别指望能精确到小数点后几位,这种转换出来的坐标,只能用来做大约的定位,不能当准尺用。
比如两个点用 GPS 测出来是 (12.345, 34.567),用全站仪测出来是 (12.340, 34.562),这两个数看起来简直一样,但背后的误差可能差几厘米。
这种转换在野外作业中贼常见,比如测绘员拿着不同设备的坐标,得先换算到同一个系统才能一起画图,这时候就得靠这个近似算法,别看不准,但能干活。 总而言之,坐标变换就是个“换局”的过程。你是人还是尺子,换了,坐标就变。别死磕那些冷冰冰的公式,多拿个计算器,多转个身,看看那点数据往哪儿飘,往往比算公式快多了。
特别是面对 3D 空间要么复杂场景时,试着先搞明白这东西在哪个角度,在哪个轴线上,再套用对应的变换,效果往往比背公式好使。
有时候,略微歪歪斜斜地看一眼,新坐标自然就出来了,不用非得凑齐所有数据,别那种死板的要求,灵活一点,往往能省不少事。