10560 怎樣在球面上「均勻」排列許多點?(上)
在這個春不暖花未開的時節,我又跟一道數學題杠上了:怎樣在球面上「均勻」地排列許多點呢?
這是一個很有實際意義的問題。比如我要測量地球上陸地的總面積。如果能在地球表面「均勻」地取 n 個點,那麼我只要簡單地數一下其中落在陸地上的點的個數 m,就可以知道陸地面積約佔地球總表面積的 m/n 了。注意,按照一定的經緯度間隔,取經緯線的交點是不行的,因為這樣取出的點不均勻:兩極附近的點比赤道處更密集,如下圖所示。
要嚴格解決這個問題,首先要把直觀感覺上的「均勻」用數學語言定義出來。一種定義方法是:讓各點之間距離的最小值最大。這樣定義出來的問題叫 Tammes problem,是密鋪問題(Packing problems)的一個特例。很不幸的是,密鋪問題往往沒有很優雅的解。另一種定義方法是:把各個點看成同種電荷,讓整個系統的電勢能最小。這個問題可以通過模擬電荷的運動來解決,但計算複雜度非常高,而且只能得到數值解。
經過一番搜索,我在 StackOverflow 上找到了一種令我驚艷的近似解法:Evenly distributing n points on a sphere。這種解法只用幾個簡單的公式,就給出了每個點的坐標。設球面半徑為 1,一共要取 N 個點,則第 n 個點的坐標由下列公式給出:
其中常數正是黃金分割比。
用這套公式生成 1000 個點的效果如下,它驚人地符合我們對「均勻」的預期:
仔細觀察上圖中點的分布,可以發現它其實有好幾條特點:
- 均勻:宏觀上看,各處點的密度都差不多;
- 密集:各點之間沒有較大的縫隙,以容納更多的點而不減小點的間距;
- 混亂:點的排列似乎有規律,但具體是什麼規律又說不出來。
我們在說「均勻」的時候,其實是暗含了這三條性質的。
公式 (1~3) 對於的值非常敏感。哪怕
稍微偏離黃金分割比一丁點兒,作出的圖效果就不好。例如,下面三個圖分別是
取 0.616、0.617 和 0.619 時得到的點陣。可以看到,
時點陣在兩極處形成螺旋,在赤道附近形成條紋,不滿足「混亂」;而左、右圖兩中的點不僅形成螺旋或條紋,而且間距還很大,連「密集」都不滿足。

第一條公式,說明各個點的豎坐標成等差數列。這相當於把球面切成相同厚度的 N 層,並在每一層的厚度中點處的表面上取一個點。注意,各層的厚度相同,但緯度的跨度是不同的:兩極處緯度的跨度更大。這樣切出來的各層有一個性質:側面積都相等。這是因為各層的側面可以近似看成環面,在緯度為
處,環面的半徑為
,而環面的寬度為
(思考:為什麼要除以
?),故各環面的面積均為
。這個性質保證了點陣分布在宏觀上的均勻性:不管在什麼緯度,都是每
面積上有一個點。
第二、三條公式,實際上就是指明了各個點的經度成等差數列。也可以這樣形象地理解:從每一個點到下一個點,首先沿著經線向上爬,使得豎坐標增加
;然後沿著緯線轉
圈。當然,
比半圈大,只繞
圈也是可以的,如下圖所示。這兩個值對應的角度分別為 222.5 度和 137.5 度,它們是把 360 度黃金分割後的兩部分,稱為「黃金角」(Golden angle)。
(圖片取自:Distributing Many Points on a Sphere)
正是這個常數讓產生的點陣具有「密集」和「混亂」兩條性質。這是為什麼呢?我們觀察前文中
時的點陣,它明顯形成幾乎沿經線方向的條紋,仔細數一下的話,這樣的條紋共有 21 條。原來,0.619 十分接近於分數 13/21(注意啦,13 和 21 都是菲波那契數哦),後者的精確值為
。若每產生一個點轉 0.619 圈,那麼產生 21 個點一共就轉過了差不多正好 13 圈。第 n 個點和第 n + 21 個點的經度十分接近,這就是條紋的來源。再看
時的點陣,它形成 13 條螺旋。這是因為
(注意,8 和 13 也是菲波那契數),但誤差比 0.619 和 13/21 大一些,所以條紋旋轉了起來。從這兩個例子我們可以發現,當
接近分數 p/q 時,就會形成 q 條條紋或螺旋。要滿足「密集」和「混亂」,就要選取不接近任何有理數的
值。
網上有許多科普資料,說明「黃金分割比是最難用有理數逼近的無理數」,或稱「最無理的無理數」,所以黃金角是能使得點陣最密集、最混亂的轉角。說明方法一般是把黃金分割比寫成連分式(Continued fraction):
但這種解釋,我總覺得不夠直接。比如,我還想弄清下列問題:
- 當連分式中出現較大的項時,點陣會呈現怎樣的分布?
- 為什麼當
時,點陣在兩極和赤道處呈現出不同的有規律分布,而
取黃金分割比時則呈現一片混亂?
真的是最優值嗎?我在試探的過程中發現
也不錯(見下圖對比),它比黃金分割比差在哪裡?
這幾個問題,我將在下一篇專欄中詳細分析。

順便說一下,在平面上也可以討論怎樣生成「均勻、密集、混亂」的點陣。一個與公式 (1~3) 類似的解答如下:
即第 n 個點落在半徑為的圓上,連續兩點之間也是轉過一個黃金角。半徑
中的根號保證了均勻(證明留給讀者),黃金角保證了密集和混亂。(4,5) 兩個公式描述的排列規律,在自然界中很常見,一個例子就是題圖中向日葵的花序。
與公式 (1~3) 不同,(4,5) 兩式可以生成無窮多個點,它們排成一個越來越大的圓盤。這種無限使得 (4,5) 兩式容易揭示更多規律,所以我下一篇中的分析將從平面點陣的分布入手。
推薦閱讀:
※數學是世界上最高級的遊戲
※【π 要那麼多位有什麼用?】- 有點意思的數學 10
※"我沒喝過百歲山,也沒推倒過女王"——笛卡爾洗冤錄
※如何用數學方法合理分配房租/房間?




