Heah Hung Xun

一支棒棒糖教我的幾何

朋友問我,一顆球形棒棒糖能不能只靠舔變成地球。最佳策略其實只有一行;而我在找到它之前,罰錯了一個星期。

中文 English

updated 2026年9月13日 18 min read #微分幾何 #球面曲率 #幾何控制

地理教室裡那顆地球儀,軸是斜的,表面有山有海。可是它的扁——赤道比兩極寬那一點——你完全看不出來。轉一圈,它看起來就是一顆球。

朋友問我:一顆完美的球形棒棒糖,能不能只靠舔,變成地球的形狀?

我當場給了一個很快、也很錯的答案:算出要少掉多少體積,除以一口舔掉多少,完了。這個答案錯得很安靜,我過了好一陣子才發現。

先把模型講清楚。球面固定不動,每一次移除可以直接相加,沒有口水。真正的糖會溶,舌頭是溫的、濕的,形狀在你動手的同時就在變。這篇以下講的,是一顆不管這些事的球。

三個問題,一個一個來:要舔掉多少、該舔在哪裡,還有——如果一口留下的是一道細長的痕,而不是一個圓點——那道痕該朝哪邊。第一題是算術。第二題難一點。第三題才是這篇存在的理由,而我一開始根本沒看見它。

舔掉多少,和舔在哪裡

橢球的扁率是赤道半徑與極半徑之差,除以赤道半徑:

f=aEbEaE.f=\frac{a_E-b_E}{a_E}.

WGS84 是手機定位用的地球模型,它給的反扁率是 298.257223563,也就是 f=0.0033528f=0.0033528。若棒棒糖半徑 R0=20R_0=20 公釐,兩極要凹進去 67 微米,大約一張紙的厚度。赤道不動,兩極按這個比例縮,要移掉的體積是

ΔV=4π3R03f112 mm3,\Delta V=\frac{4\pi}{3}R_0^3f \approx 112\ \text{mm}^3,

也就是整顆 33.5 立方公分的糖的 0.34%。

這就是我那個很快的答案。它對,可是對的是另一個問題。一罐油漆知道自己有幾公升,卻不知道要畫什麼。

均勻地舔,只會得到一顆小一點的球。赤道舔得比兩極多,糖就變成橄欖球,方向整個反了。真正要的是一個「移除場」:球面上每一點,各該凹多深。

以北極向下量的角度作餘緯 θ\theta。把 ff 當小量展開,第一階的目標是

δ(θ)=R0fcos2θ.\delta_\star(\theta)=R_0f\cos^2\theta.

代兩個端點就懂了。北極 cos2θ=1\cos^2\theta=1,整整 67 微米都要拿走;赤道是零,一口都不用。體積那個算式聽不見的問題,幾何一句話就答了。1

先講傅科擺

這一步得先繞開棒棒糖。

一八五一年,Foucault 在巴黎萬神殿掛了一條 67 公尺長的擺線,下面吊一顆 28 公斤的鐵球。擺一擺開,擺動的平面就慢慢轉。在緯度 φ\varphi 的地方,它每天相對地面轉 360sinφ360^\circ\sin\varphi。巴黎大約 49 度,一天轉兩百七十幾度。

為什麼會轉呢?因為擺動方向沿著緯線被地球帶著走,而它自己不主動左右扭。這個「不主動扭」,數學上叫平行移動(parallel transport)。在單位球上,方程短得幾乎不像方程:

v˙=(vx˙)x.\dot v=-(v\cdot\dot x)x.

箭頭的改變只朝法線,切平面裡一點多餘的扭轉也沒有。把 vxv\cdot x 微分,就知道箭頭一直貼著球面;把 vvv\cdot v 微分,就知道長度不變。

現在讓一支箭頭沿一條緯線走完整一圈。回到原地,它通常已經轉了。餘緯 θ0\theta_0 的緯線,轉角是

ψ=2π(1cosθ0)(mod2π),\psi=2\pi(1-\cos\theta_0)\pmod{2\pi},

正好等於這條緯線圍住的球冠面積,這是 Gauss–Bonnet 的一個具體結果。餘緯 45° 時,轉 105.4416°,寫成弧度是 1.840302369021。十二位數字不是炫耀,那是抓積分器臭蟲最便宜的辦法,也是世上唯一會有人印十二位數的理由。

有件事我想了很久才想通:擺的 360cosφ360^\circ\cos\varphi 和幾何的 360(1cosθ)360^\circ(1-\cos\theta),兩個加起來剛好一整圈。不是巧合。擺相對地面轉多少,就是地球轉的一圈,扣掉平行移動偷走的那一份。Foucault 量到的是餘額。

「不主動扭」是對每一小步說的,不是對整趟路說的。每一步都筆直,合起來卻接不回去。這就是曲率。

張海潮在《數學傳播》上寫過 Foucault 和 Levi-Civita 這條線。倒是他順手記下的一件事更妙:他的同事早就告訴他兩者的關聯,可是力學的書不提 Levi-Civita,微分幾何的書也不提 Foucault,文獻上一直看不到。

一口舔痕要記多少東西呢?

回到糖上。

如果接觸痕是圓的,記中心和大小就夠了。圓轉任何角度都一樣。把圓拉成橢圓,事情就變了:同一個中心、同一對長短軸,躺成南北向和躺成東西向,舔掉的不是同一塊糖。一個球面座標,已經不夠描述你舔了哪裡。

在接觸點貼上兩支互相垂直的小箭頭,一支沿長軸,一支沿短軸。兩支都躺在糖的表面上,沒有一支戳進去;數學上叫切向量(tangent vector)。再配上向外的法向量,三支合起來就是一個三維旋轉:

R=[e1 e2 x]SO(3).R=[e_1\ e_2\ x]\in\operatorname{SO}(3).

最後一欄是你在哪,前兩欄是舔痕朝哪。定向正交標架叢(oriented orthonormal frame bundle)聽起來嚇人,其實不過是「球面上每一點,加上所有能貼在那裡的兩支垂直箭頭」罷了。把箭頭擦掉只留位置,很多標架就塌成同一點:

S2SO(3)/SO(2).S^2\cong\operatorname{SO}(3)/\operatorname{SO}(2).

這裡我記多了。橢圓轉 180° 還是同一個橢圓,標架卻分得出這兩個狀態。這一手不乾淨,可是平行移動剛好是作用在標架上,寫下來最省事,所以我留著。

舔痕本身:中心最重,向外淡出,再拉成橢圓。用對數映射(logarithm map)把接觸點附近攤到切平面,在極座標 (r,ϕ)(r,\phi) 裡寫成

K(r,ϕ)=χ(r)Za,bexp[r22(a+bcos2ϕ)],a>b.K(r,\phi)=\frac{\chi(r)}{Z_{a,b}} \exp\left[-\frac{r^2}{2}\big(a+b\cos2\phi\big)\right], \qquad a>|b|.

參數不用算積分就讀得出來。aa 管平均寬窄,bb 管兩邊差多少。b=0b=0 時痕是圓的,方向完全不相干;b|b| 越大,痕越長越扁,對轉角越敏感。全文都取 a=16a=16rc=1.2r_c=1.2,所以痕的寬度是 1/a=0.251/\sqrt{a}=0.25 弧度,在 20 公釐的糖上是 5 公釐的弧長。差不多就是一條舌頭。

χ\chi 是平滑截斷,把核函數關在一頂小帽子裡:

χ(r)=exp[r2rc2r2](r<rc),\chi(r)=\exp\left[-\frac{r^2}{r_c^2-r^2}\right]\quad (r<r_c),

帽子外面是零。之所以要它,是因為對數映射在正對面那一點對方向沒有意見;與其跟對映點糾纏,數學上就乾脆截掉。這是個補丁。我一直不喜歡它。Za,bZ_{a,b} 把每個核在球面上的積分歸一成 1,用的是球面面積元 dA=sinrdrdϕdA=\sin r\,dr\,d\phi,不是平面的那個。

到這裡,要寫下「舔痕被轉了以後會怎樣」的材料都齊了。

轉了一圈,差多少?

角度還不是後果。圓形的舔痕隨你怎麼轉,舔掉的糖一模一樣;也就是說,我辛苦算出來的那個轉角,換錯了痕,可以完全看不見。那麼,兩個舔痕究竟差多少呢?

把原來留下的痕記作 KK,現在會留下的記作 KψK_\psi,同一個中心,逐點取差、平方,對整個球面加起來:

Dψ2=S2(KKψ)2dA.D_\psi^2=\int_{S^2}(K-K_\psi)^2\,dA.

直接算這個二維積分不漂亮。不過,旋轉不改變核的大小,所以先算重疊 C(ψ)=S2KKψdAC(\psi)=\int_{S^2}KK_\psi\,dA 就夠了:Dψ2=2(C(0)C(ψ))D_\psi^2=2(C(0)-C(\psi))。兩個鐘形曲線相乘,指數裡就出現兩個餘弦,而它們會併起來:

cos(2ϕ)+cos(2ϕ2ψ)=2cosψcos(2ϕψ).\cos(2\phi)+\cos(2\phi-2\psi)=2\cos\psi\cos(2\phi-\psi).

eucosαe^{-u\cos\alpha} 的角度平均是零階修正貝塞爾函數 I0(u)I_0(u)。於是一個二維曲面積分,塌成一個只沿半徑走的積分:

Dψ2=4πZa,b20rcχ(r)2ear2[I0(br2)I0(br2cosψ)]sinrdr.D_\psi^2=\frac{4\pi}{Z_{a,b}^2} \int_0^{r_c}\chi(r)^2e^{-ar^2} \left[I_0(br^2)-I_0(br^2\cos\psi)\right]\sin r\,dr.

公式就在這裡。先看它一會兒,再聽我說裡面有什麼。

I0I_0 是偶函數,而且隨自變數的大小遞增。所以轉 0° 或 180° 時 DψD_\psi 是零,轉 90° 時最大,b|b| 越大差越多。照這樣讀下來,結論很清楚:最糟的路徑就是和樂最大的那一條。繞一圈大的,回來轉得最兇,痕就錯得最厲害。

餘緯 60° 例外。

60° 的球冠面積剛好是 π\pi,標架整整轉了半圈,能轉的都轉到底了。可是舔痕一模一樣——橢圓轉 180°,兩條軸各自反向,橢圓分不出來。我有一個下午都以為積分寫壞了。沒有壞。幾何走到極限,能量上什麼也沒發生:無功而返。

這個 180° 的例外會不會有更一般的版本,我不知道,也沒在任何地方看到有人寫過。

沿一條緯線走一圈

把舔痕帶著繞球一圈,回來就轉了

105.4°

手不刻意扭轉,讓接觸沿緯線走一整圈。回到原地,它卻指向別的方向。右邊那條曲線,是你原先留下的痕與現在會留下的痕之間的精確差距。

起點 · 路徑餘緯 45°04590135180這條路徑標架轉角 ψ(度)
標架轉角105.44°
看得見的轉角(模 180°)105.44°
相對差距0.3968
要壓住方向得扭多少254.6°

正圓的舔痕(伸長程度 0)對這一切無感。這一頁上的每件事,都是「有長軸」的代價。

圖裡的差距就是上面那條公式,在你的瀏覽器裡當場算的,不是查表。把路徑拉到 60°,看標架轉角停在 180.00°,而差距掉到零。

公式還順手給了一件事。把貝塞爾函數對小 bb 展開,相減時常數項對消,領先項是二次的:

Dψ2=πb2sin2ψZa,020rcχ(r)2ear2r4sinrdr+O(b4).D_\psi^2= \frac{\pi b^2\sin^2\psi}{Z_{a,0}^2} \int_0^{r_c}\chi(r)^2e^{-ar^2}r^4\sin r\,dr +O(b^4).

所以差距本身對伸長程度是線性的,它的平方才是二次的。這兩件事分不清,會白花一個下午。寫 ε=b/a\varepsilon=b/a,走 45° 的緯線,展開預測領先階是 1.040885ε1.040885\,\varepsilon

ε=b/a\varepsilon=b/a相對差距
0.010.008618
0.020.017236
0.100.086272
0.400.350946
0.600.539096

最小的那個對比加倍,差距就加倍。數值量到的對數斜率是 0.999973。我想要的是 1。那個縫是積分誤差,很無聊,而它無聊正是我要的。

我罰錯了東西

有了核、有了方向、有了轉角,剩下的看起來只是擬合。我照最直覺的方式擺出目標函數:挑一組候選舔痕,每個給一個非負強度 αj\alpha_j,讓總移除圖案盡量靠近目標場:

J(α)=δjαjKj22,αj0.J(\alpha)=\Big\|\delta_\star-\sum_j\alpha_jK_j\Big\|_2^2, \qquad \alpha_j\ge0.

12 個中心,每個 4 個方向,48 個候選,非負最小平方。相對誤差 0.4365。我加方向,我挪中心,怎麼弄都下不了 0.4,一個星期都以為卡住的地方很深。

卡住的地方是:我罰錯了東西。

回頭看常數在做什麼。均勻的一層移除,每一點凹一樣深,它把棒棒糖削成一顆小一點的棒棒糖——而小一點的棒棒糖,形狀是一樣的。零階那個球諧成分根本不屬於這個設計問題。它花糖,不換形狀,是一個免費參數;而我整整一個星期,都在全額擬合它。

真正要管的只有第二階。我那個 0.4365 裡面,有很大一塊是堅持要 δ\delta 分毫不差地等於 R0fcos2θR_0f\cos^2\theta;可是要的其實是 δ\delta 等於 R0fcos2θR_0f\cos^2\theta 再加上任意常數。

答案只有一行

把常數從目標裡拿掉,問題就不再是優化,變成一個除法。

關鍵這一步是這樣。目標只依賴 θ\theta,那就找一個也只依賴 θ\theta 的配方:球面上一個密度 ww,經度方向均勻,沿著一圈圈緯線舔。把一個痕沿緯線均勻抹開、再把各圈加起來,這就是球面卷積;而球面上的卷積,是一個球諧「音符」一個音符地相乘。若核 KK 的第 \ell 階傳遞是

k=2π0rcK(r)P(cosr)sinrdr,k_\ell=2\pi\int_0^{r_c}K(r)\,P_\ell(\cos r)\sin r\,dr,

那麼密度的第 \ell 個音符 ww_\ell,出來就是 wkw_\ell k_\ell。音符彼此不干擾。要第二階對,除以 k2k_2 就好。

w=w0+w2P2(cosθ)w=w_0+w_2P_2(\cos\theta)。第二階對上,需要 w2k2=23R0fw_2k_2=\tfrac23R_0f。零階是自由的,那就壓到非負允許的最小:P2P_2 的最低點是 12-\tfrac12,所以 w0=w2/2w_0=w_2/2,於是

  w(θ)=R0fk2cos2θ  \boxed{\;w(\theta)=\frac{R_0f}{k_2}\cos^2\theta\;}

最佳的舔痕密度,和你要雕的東西同一個形狀。兩極舔得最重,按 cos2\cos^2 遞減,到赤道完全停手,每一圈沿經度平均散開。這樣得到的移除場是

δ(θ)=R0fcos2θ+R0f3(1k21),\delta(\theta)=R_0f\cos^2\theta+\frac{R_0f}{3}\left(\frac1{k_2}-1\right),

目標加一個常數。形狀誤差是零。我拿數值去驗,得到 4×10134\times10^{-13}——那就是「零」在雙精度裡的長相。

這個核的 k2=0.847721k_2=0.8477212所以配方要移掉 1/k2=1.17961/k_2=1.1796 倍的體積差:133 立方公釐,而不是 112。多出來的 18% 不算浪費,它全部進到那個常數項;在 20 公釐的糖上,那一項是 4.0 微米。

四微米。你在雕一個 67 微米的特徵,而「做到完全正確」的代價,是成品比理論最小值小了四微米。四微米沒有人會發現。這就是朋友那個問題的答案,而它躲在我眼前一個星期。

三百口

密度還不是策略。你不可能連續地舔,你只能舔有限次。

那就把 MM 圈擺在 Gauss–Legendre 的餘緯上,每一圈分到 cos2θ\cos^2\theta 該給的質量,再平均分給圈上 nkn_k 口;nkn_k 跟著圈的周長走,讓各處的重疊差不多。

圈數口數形狀誤差
51261.8×1011.8\times10^{-1}
71921.5×1021.5\times10^{-2}
92584.5×1044.5\times10^{-4}
113165.0×1065.0\times10^{-6}
133843.3×1073.3\times10^{-7}

11 圈、316 口,形狀就對到百萬分之五。把公式丟掉,改用非負最小平方重新解一次各圈的質量,解出來的數字和公式對到八位——這才是我真正信的那個檢查。

順帶一提,三百口差不多也就是一支棒棒糖吃完要的口數。這一點我沒有安排。

配方

最佳策略到頭來叫你做什麼

5.0e-6

沿著一圈圈緯線舔。每一圈的總移除量正比於該緯線餘緯的 cos²,再平均分給圈上每一口。拉動滑桿加上更多圈,看實線怎麼貼上虛線。

沿一條經線的移除量04590135180餘緯每一口落在哪裡餘緯 168.0° · 強度 0.0395餘緯 168.0° · 強度 0.0395餘緯 168.0° · 強度 0.0395餘緯 168.0° · 強度 0.0395餘緯 168.0° · 強度 0.0395餘緯 168.0° · 強度 0.0395餘緯 168.0° · 強度 0.0395餘緯 168.0° · 強度 0.0395餘緯 168.0° · 強度 0.0395餘緯 168.0° · 強度 0.0395餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 152.5° · 強度 0.0318餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 136.9° · 強度 0.0217餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 121.3° · 強度 0.0108餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 105.6° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 74.4° · 強度 0.0029餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 58.7° · 強度 0.0108餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 43.1° · 強度 0.0217餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 27.5° · 強度 0.0318餘緯 12.0° · 強度 0.0395餘緯 12.0° · 強度 0.0395餘緯 12.0° · 強度 0.0395餘緯 12.0° · 強度 0.0395餘緯 12.0° · 強度 0.0395餘緯 12.0° · 強度 0.0395餘緯 12.0° · 強度 0.0395餘緯 12.0° · 強度 0.0395餘緯 12.0° · 強度 0.0395餘緯 12.0° · 強度 0.0395北極南極經度
這個配方目標 cos²θ
總共幾口316
形狀誤差4.96e-6
相對於最少量的移除量1.180×
額外均勻移除0.0599

11 圈、316 口,形狀誤差 5.0e-6。實線比虛線高出一個常數,而常數恰好是唯一不要緊的東西:它只把棒棒糖整體削小,不動形狀。也正因為這段常數,配方的總移除量是體積差的 1.180 倍。 赤道那一圈分到零,所以沒有畫出來。

先猜一猜:幾圈才夠?再把滑桿拉到 11 圈,看實線怎麼貼上虛線,中間只差一個往上的平移。那個平移就是整篇的重點。

長軸到頭來值多少?

我本來以為方向控制會在這裡回本。結果剛好相反。

把橢圓的痕放回一圈圈的配方裡。上面那個解析解假設核是圓的,因為圓核才讓「一圈一圈加起來」真的是卷積。斜的橢圓不是:有效的第二階傳遞現在同時看圈的餘緯和長軸的傾角 β\beta,長相是 kˉ2(θ)+Δ(θ)cos2β\bar k_2(\theta)+\Delta(\theta)\cos2\beta。餘緯 45° 的圈上,長軸沿經線每一口給出 0.2234 的第二階反應,沿緯線只有 0.1871。經線贏 19%。

然後真的拿去擬合,經線這條規則輸得很慘。

每個位置的痕口數形狀誤差
只一種傾角,沿經線2002.8×1022.8\times10^{-2}
四種傾角 0/45/90/135°12641.1×1031.1\times10^{-3}
八種傾角25284.1×1054.1\times10^{-5}
正圓3165.0×1065.0\times10^{-6}

固定一種傾角,每一口都留下 m=2m=2 的角向成分。目標裡沒有 m=2m=2,11 個圈的強度抵銷不掉。加到 21 圈呢?也只到 1.8×1021.8\times10^{-2}。這是地板,不是收斂速度。

四種傾角等量混合,第 2、4、6 階恰好消光(四個相位加起來是零,除非階數是 8 的倍數),第一個倖存者是 m=8m=8,大小是核的 5.6×1045.6\times10^{-4}。而這,正好就是表裡那個誤差的量級。八種傾角把倖存者推到 m=16m=16,誤差再掉二十五倍;到那時候,拖後腿的是圈距,方向性已經不重要了。

長軸該拿來做什麼

在這裡,方向性最好的用途是把自己抵銷掉

1.1e-3

同樣十一圈、同樣的目標、同樣的非負擬合。唯一的差別,是每個位置允許用幾種傾角。傾角越多,每一口越不划算,但答案越好。

只用一種:沿經線2.8e-2四種傾角1.1e-3八種傾角4.1e-5正圓的舌頭5.0e-6同一個位置上被平均掉的那些舔痕
形狀誤差1.07e-3
口數1264
殘存的最低角向階m = 8
相對於正圓的誤差215×

0°、45°、90°、135° 等量混合,恰好消掉第 2、4、6 角向階。第一個倖存者是 m = 8,而這裡的誤差就正好由那點殘留決定。

四種傾角平均起來的痕,角向上恢復了旋轉對稱,徑向上卻胖了一點——側面被抹進一個 I0I_0 因子——所以 k2k_2 從 0.847721 降到 0.820925,糖要多花,從 1.1796 倍變成 1.2181 倍。這才是「有長軸」的真正代價:形狀沒有變差,只是多吃了糖。

所以,面對一個這麼平滑、這麼對稱的目標,方向性是負債;一條會轉的舌頭,最好的用法是設法把自己的方向抵銷掉。這不是我預期的結果,而它能推廣到多遠,我想講得保守一點:一個只有第二階、只依賴餘緯的目標,已經是最和善的一種要求。換一個真有方向結構的目標,帳就倒過來算了。

那麼,如果你偏要沿經線呢?舌頭只有一條,形狀只有一種,這個選擇是很現實的。可是要讓長軸一路沿著經線,代價不是零。餘緯 θ\theta 的緯線,測地曲率是 cotθ\cot\theta,每一弧度經度走 sinθ\sin\theta 的弧長,於是壓住方向要主動扭

dβdφ=cosθ\frac{d\beta}{d\varphi}=\cos\theta

一整圈就是 2πcosθ2\pi\cos\theta,45° 時是 254.56°。而你不出的那一份,曲率替你出:剩下的 2π(1cosθ)2\pi(1-\cos\theta) 就是和樂,105.44°,和前面那個數字一模一樣。

也就是 Foucault 那條擺。緯度 φ\varphi 等於餘緯 θ\theta 的餘角,所以擺每天相對地面轉的 360sinφ=360cosθ360^\circ\sin\varphi=360^\circ\cos\theta,正是你壓住長軸必須自己扭的那一份;剩下的 360(1cosθ)360^\circ(1-\cos\theta) 是曲率收走的。和樂公式不是這個問題旁邊的一件奇觀,它是控制律裡的那一項修正。帶一條有方向的舌頭繞緯線舔,你要嘛每弧度付 cosθ\cos\theta,要嘛接受 2π(1cosθ)2\pi(1-\cos\theta) 的漂移,沒有第三條路。球是彎的。

我到底檢查了什麼

我做了三件檢查。前兩件是例行公事:用四階 Runge–Kutta 把平行移動方程積出來,步長逐次減半,誤差按四次方掉,20,000 步的結果和解析角差 8×10138\times10^{-13} 弧度;貝塞爾那條一維公式和直接在徑向、角向網格上硬積的結果,兩套獨立的歸一,表裡最大的差距小於 1.3×10141.3\times10^{-14}——那是雙精度在抱怨,不是兩者不合。第三件才是我真正在意的:檢查非負最小平方的最優條件,再把同一組強度搬到更細的球面網格上,看改善會不會消失。沒有消失。

這些檢查撐不起來的,是「路線」。配方是一張空間的處方:舔這裡、舔這麼重、舔這麼多次。它沒有說先後次序,而帶著方向性的舌頭,次序是會算帳的——平行移動會改變你手上的箭頭,於是改變第一口之後的每一口。一個每次接觸都把自己方向歸零的工具,可以讓這筆歷史帳消失。舌頭不行。

球面小波、切向標架、平行移動、和樂,都是既有的幾何。規範等變卷積和流形上的平行移動卷積,早就處理過「濾波器方向沿曲面怎麼改變」。讓整個答案塌成一個除法的那件事,比它們都老:Funk–Hecke 定理,一九一六年,說的正是「軸對稱的核作用在每個球諧上只是乘一個數」,而那個數就是上面的 kk_\ell。至於表面拋光那一行——玉石研磨的師傅大概比誰都早知道——文獻裡也早有橢圓接觸與工具路徑影響移除量的實驗。我沒找到有人寫過的,是中間這座橋:把常數從目標裡拿掉之後,cos2θ/k2\cos^2\theta/k_2 這個密度就是精確的非負最佳解;這個核的方向反應可以壓成一條一維積分;180° 的例外;以及四種傾角在第七階以下都是旋轉對稱的,而這正是它們有效的原因。

技術論文在這裡,程式可以重現上面每一個數字;跑策略的那支是 code/optimal_strategy.py

所以,舔得成嗎?

舔得成。一圈一圈地舔,兩極最重,按 cos2θ\cos^2\theta 遞減,赤道停手,大約三百口,舌頭保持圓的,或者保持一直在轉。你會比最少量多舔掉 18%,成品小四微米,形狀對到百萬分之五。

我一開始錯的不是算術,是以為答案住在「多少」裡面。多少只是一個數,而且是整個問題裡最不有趣的那一個。真正有內容的都在第二題;至於第三題,到頭來講的是曲率為「你有一個偏好方向」這件事開給你的帳單。

那顆地球儀還是斜斜地立在教室裡,扁得看不出來。親愛的讀者,你想,Levi-Civita 當年要是先看過那條擺,會不會早幾年寫下平行移動呢?

Footnotes

  1. ff 的第二階會冒出一個 cos4θ\cos^4\theta 項,係數是 32f2R0-\tfrac32f^2R_0,也就是把第四階帶進目標。上面那套方法照樣能用,不必改:密度多加一個 P4P_4 音符,除以 k4=0.575122k_4=0.575122 就是了。這個修正在 20 公釐的糖上是 0.34 微米。我提它,只是要你知道取一階是一個選擇,不是一個限制。

  2. k2k_2 只看痕有多寬。舌頭越窄,越接近一個 delta 函數,抹平得越少,k2k_2 就越靠近 1:a=64a=64 時是 0.955354,多花的糖降到 4.7%。寬舌頭的代價,完全是糖的代價——代價能只是這樣,算是很幸運了。