彩虹没有尽头:42° 不是位置,是光线回不来的角度
- 作者:Bougie
- 创建于:2026-11-03
- 更新于:2026-11-03
小时候在乡下,雨一停我就往田埂上跑。彩虹挂在东边,看着离得近,跑过两条垄它还在那么远。大人说彩虹的尽头埋着一坛金子,我信了好些年,后来才明白这话连错都算不上——它没有尽头,谈不上远近。
真正让我愣住的是另一件事:它跟着我动。我走,它也走;我停,它也停。这不是错觉,是几何。
# 你追的从来不是同一道彩虹
太阳得在你背后,雨幕在你前面,你站中间。从眼睛出发、正对太阳的反方向有个点,叫反日点——低头看自己的影子,影子的脑袋差不多就落在那儿。彩虹是以这个点为圆心、半径 42° 的圆。地面把下半圈挡了,所以你只看到一道拱;坐飞机穿过雨云,能看见整圈。
圆心长在你身上,这件事的后果比听起来严重。你往前挪一米,反日点跟着挪,那个 42° 的圆锥整个重新对准一遍,落进你眼睛的是另一批雨滴。并排站的两个人,各自收到各自那批水滴折回来的光,看到的是两道不一样的彩虹。照片也留不住同一道:镜头换个位置,虹就换了。
所以「尽头」这个问题从一开始就不成立。它不是一个挂在那儿的东西,是一次只对你成立的对准。

# 一滴水里发生了什么
把镜头推到一滴雨上。太阳光是平行的,照进一个半径 R 的球形水滴,在表面折一次,撞到后壁反射一次,再从前面折出来——主虹就这么一次内反射。设光线瞄准的高度(碰撞参数)是 b,Snell 定律把入射角 i 和折射角 r 钉成 sin i = b、sin r = b/n,n 是水的折射率,可见光中段约 4/3。
整条光路相对原来方向的偏折角有个很短的式子:
D = 180° + 2i − 4r
(一次内反射;两次就是 360° + 2i − 6r。)我们看到的彩虹角,是出射光离「正后方」差多少,也就是 α = |180° − D|。
我把这段写成了 scripts/experiments/rainbow-caustic.mjs,纯 CPU、不联网、不装任何包,谁都能重跑。先拿它追 20 万条光线,按球面被照亮的面积抽样(b = √u,而不是均匀撒 b),把出射角丢进 0.25° 的箱子里。

# 42° 是个回不来的角度
结果第一眼有点反常:光线没有均匀铺开,越靠 42° 越密,最后一箱直接炸了。
| 出射角 | 光线数 |
|---|---|
| [20°, 20.25°) | 691 |
| [40°, 40.25°) | 3662 |
| [41°, 41.25°) | 5518 |
| [41.5°, 41.75°) | 8096 |
| [41.75°, 42°) | 14590 |
| [42°, 42.25°) | 7159 |
最靠边那一箱是 [20°, 20.25°) 的 21.1 倍。而超过 42.05° 的光线,一条都没有——20 万条里 0 条。最后那箱里的 7159 条,全挤在 42.00° 到 42.03° 这一小截里,再往外就断了。
这就是我以前一直没想通的那层:彩虹的亮边不是「那里光特别多」,是「过了这条线就一滴都回不来了」。所有一次内反射的光被挤在 42° 以内,边界上密度发散,亮成一条锐利的线。光学里管这个叫焦散(caustic),游泳池底晃动的亮网、咖啡杯里那道弯月形的光,都是同一件事。
求这个边界其实不用靠模拟。让 dD/di = 0,Snell 一求导,闭式解干净得有点过分:
cos² i = (n² − 1) / 3
代 n = 4/3,得 i* = 59.391°、r* = 40.203°、最小偏向角 137.970°,于是 α_max = 42.030°。脚本里另两条独立路线——在 b 上密集扫描求极值、以及逐界面做向量折射与反射再累积转角——和闭式解对到 2×10⁻¹² 度,2000 个碰撞参数里只有 2 次因为全反射被跳过。三条路撞出同一个数,我才敢把 42.030° 写下来。
顺带一个能自己验证的观察:虹的内侧比外侧亮。0° 到 42° 一直有光,外侧直接清零。这个明暗跳变不是渲染出来的,是 20 万条光线真的没往那边走。

# 颜色只是小数点后第三位
彩虹的宽度藏在 n 的小数点后面。水的折射率在可见光里从红端的 1.3311 变到紫端的 1.3430,差不到百分之一,可这个差值被 42° 那道极值放大成了一条彩带:
| 波长 | n | 主虹外缘 |
|---|---|---|
| 红 C 线 656.3 nm | 1.3311 | 42.355° |
| 黄 D 线 589.3 nm | 1.3330 | 42.078° |
| 蓝 F 线 486.1 nm | 1.3372 | 41.471° |
| 紫 约 400 nm | 1.3430 | 40.646° |
红在外、紫在内,整道虹 1.709° 宽。满月的视角直径约 0.5°,也就是说抬头看到那一整条七彩,横过来只顶三个半月亮。课本里那句「彩虹 42°」,取的其实是红端。

# 多一次反射,颜色翻过来
让光在水滴里多待一轮,式子变成 D = 360° + 2i − 6r,极值条件跟着变成 cos² i = (n² − 1) / 8。脚本给出 i* = 71.832°、r* = 45.448°、D = 230.978°,副虹落在 50.978°,颜色顺序整个反过来——红跑进里面,紫跑到外面。
更妙的是中间那块。主虹的光全在 42.03° 以内,副虹的光全在 50.98° 以外,两段之间 8.95° 的天空,这两种虹光都收不到,只剩背景天光,于是明显更暗。我又拿 20 万条副虹光线扫了一遍,落进 (42.05°, 50.4°) 的条数是 0。这片夹在两道虹之间的暗带叫亚历山大暗带,公元二世纪的 Alexander of Aphrodisias 评注亚里士多德《气象学》时就记下过它,比笛卡尔量出那个角度早了一千四百多年。

# 笛卡尔算出了角度,没算出颜色
1637 年笛卡尔在《方法论》的附录《气象学》里,拿一个灌满水的玻璃球当水滴,一束一束量过去,量出了主虹约 42°、副虹约 51°。角度对了,颜色没着落——他不知道白光里还藏着一堆不同的折射率。补上这块的是牛顿,棱镜把颜色拆开,色散才接上那条 1.7° 的彩带。
几何光学到此为止了。虹的内侧偶尔还能看见几条更淡的粉绿彩条,叫复虹,42° 的极值算不出它们——那是光在焦散附近自己跟自己干涉出来的,得等 1838 年艾里写焦散附近光强的衍射积分才讲得通。说白了,那条最亮的边是几何光学能到的极限,紧挨着它的细节已经属于波了。
我挺喜欢这个顺序:亚里士多德先说虹是反射,笛卡尔算准了角,牛顿给了颜色,艾里才把边上那点毛刺收进去。中间隔了两千年,每一步都只是在回答同一个问题:光到底往哪儿折。
下次雨停,别急着找尽头。站定,背对太阳,看自己影子的头——你正站在一个 42° 圆锥的顶点上。几十亿滴雨各折了一束阳光回来,恰好都卡在同一个回不来的角度上,才凑成眼前这一道。它不在东边,也不在田埂尽头,它只在你这儿。往前走一步,它就换一批雨、重新对准你一次。