抄近路和绕远路,为什么一样远?
你在曼哈顿打了辆出租车,从一个路口到斜对面那个路口。司机可以先往东开三个街区、再往北开三个;也可以走一格东、一格北、一格东……拐来拐去走个"楼梯"。可你会发现一件怪事:只要他不往回开,无论怎么拐,总路程一模一样。
因为车不能像鸟一样飞对角线——它被街道网格锁死了。在这个世界里,"距离"不再是我们熟悉的那条直线。
三种不一样的"距离"
我们平时说的距离,是两点间那条直线的长度,叫欧氏距离——也就是勾股定理量出来的那条斜边(见 [[pythagorean-theorem]])。但它只是众多距离里的一种。
把两点的横、纵坐标差记作 、,三种最常见的距离是:
- 曼哈顿距离(出租车走的):横竖一段段加起来,
- 欧氏距离(鸟飞的直线):
- 切比雪夫距离(国际象棋"王"走的):
最后这个最反直觉。国际象棋的"王"每步能往八个方向走一格,斜着走也只算一步。所以它从棋盘一角走到对角,要的不是 步,而是 步——斜着冲过去就行。
同样两个点,三种规则,量出三个不同的"远近"。距离不是天经地义的,它取决于你怎么被允许移动。
每种距离都有自己的"圆"
这是最妙的地方。所谓"圆",就是到圆心距离都相等的点连成的形状。换一种距离,圆就长得不一样:
| 距离 | 怎么算 | "单位圆"长什么样 |
|---|---|---|
| 欧氏 | 我们熟悉的圆 | |
| 曼哈顿 | 立着的菱形(钻石) | |
| 切比雪夫 | 正着的正方形 |
动画里这三个形状叠在一起,一眼就能看出区别。顺带一个彩蛋:在曼哈顿几何里,"圆周率"不是 3.14,而是整整 4——菱形一圈的"周长"除以"直径"恰好等于 4。
它们其实是一家人
这些距离不是各自孤立的,它们都属于一个统一的公式——闵可夫斯基距离:
拨动里面的 ,神奇的事情发生了:
- 时,就是曼哈顿距离,单位圆是菱形
- 时,就是欧氏距离,单位圆是圆
- 时,就是切比雪夫距离,单位圆鼓成正方形
动画里拖动 ,你能看到菱形平滑地长成圆、再鼓成方。它们是同一族曲线的不同长相。
曼哈顿和切比雪夫,竟是同一个
还有个更漂亮的结论。把曼哈顿的菱形绕中心转 45°、再放大 倍,它会严丝合缝地压在切比雪夫的正方形上。
这说明:切比雪夫距离不过是"把坐标系转了 45°的曼哈顿距离"。两个看似不同的世界,本质上是同一个,只是看的角度差了 45°。
它藏在哪些地方
- 导航与物流:城市配送、仓库取货机器人在网格货架间穿行,算的都是曼哈顿距离。
- 游戏与棋类:棋盘寻路、塔防的攻击范围,常用切比雪夫距离("王"的走法)。
- 图像处理:给图形描边、计算像素到边界的"距离变换",按的就是这几种格点距离。
下次坐进出租车,看着窗外一格格倒退的街区——你正穿行在一个"圆是菱形"的几何世界里。