想使用程式來模擬自然,螺線是個不錯的開始,除了自然與規律帶來的美感之外,深入認識螺線的特性,也能在繪圖、建模或實體世界中發揮效用。

從黃金螺線開始

如果想玩玩線條之美,黃金螺線應該是個不錯的入門選擇,若以極座標(r,Θ)表示的話(Θ為徑度),黃金螺線的公式是r=φ^(Θ*2*PI),φ是黃金比例(1+sqrt(5))/2,使用迴圈遞增Θ求得r,將每個(r,Θ)連結,就可以畫出黃金螺線,對於稍有程式基礎的人來說,並不困難。

在接觸圖學相關知識時,我不愛從公式入手,而是偏好從具體現象中理解。例如,黃金螺線有一個常為人知的事實,是跟黃金矩形有關,而黃金矩形又跟費式數列有關──在維基百科的〈費氏數列〉條目中,有個黃金矩形圖片,由數個正方形組成,而正方形邊長關係,就符合費式數列,將每個正方形的兩個對角,使用圓弧連接起來,弧半徑就是費式數,最後就構成了黃金螺線。

計算費式數列對程式人並不陌生,多半也知道費式數列與動植物的成長相關,自然界不少生物的成長過程,在外觀上,也就常觀察到類似黃金螺線的現象,例如,太陽花的花蕊、熱帶氣旋、鸚鵡螺的腔室等。

不過,黃金矩形、黃金螺線是有些被濫用的名詞,不少現象只是看來像黃金矩形、黃金螺線,但其實不是。以鸚鵡螺來說,要更精確地描述腔室分布的話,要使用等角(equiangular)螺線(亦稱為對數螺線、成長螺線)。

等角螺線的極座標公式是r=a*e^(b*Θ),e是歐拉數2.718281……當a為1而為ln(e)*2/PI時,就是黃金螺線,也就是等角螺線的一個特例,等角螺線之所以等角,是因為從r為0的極點(pole)任意角度往外畫一直線,與螺線交點處的切線,形成的角度必然相同。

既然如此,這表示透過海龜繪圖,令海龜每次前進至與極點往外畫的直線相交時,轉動固定角度,也可以畫出等角螺線。

這跟飛蛾撲火時的飛行軌跡是相同道理,飛蛾是靠著陽光來辨別飛行方向,然而陽光是平行光,火是點光源,光線就是從極點往外的直線,假設飛蛾想與光線保持45度飛行的話,就得不斷地在與光線交叉時固定轉動45度,飛行軌跡就形成等角螺線,最後的下場就是撲向火源。

四處可見的阿基米德螺線

若要談到日常生活中最常見的螺線應用,應該就是阿基米德螺線,公式是r=a+b*Θ。先從具體實例來看吧!見過蚊香嗎?蚊香的形狀就是阿基米德螺線,那麼,製作蚊香時,是依公式在轉動鋪料上去的嗎?

這太麻煩了,只要等角速度轉動圓盤,然後直線地以等速由內往外鋪料就可以了,究其原理,從公式r=a+b*Θ來看,Θ的角速度相同,r的增加速度也就相同,這就是阿基米德螺線也被稱為等速螺線的原因。

阿基米德螺線在的應用極為常見,是因為它能將轉動的變化換為直線的變化。例如,你看過舊式唱片機嗎?唱片溝痕就是阿基米德螺線,隨著唱片轉動,唱針會不斷地往內直線推進;活動扳手的機制也是阿基米德螺線的變化應用,只是隨著轉動增加的,不是半徑,而是高度,然而也是將轉動化為直線運動。另外,螺旋輸送機中的螺旋葉片、固定的螺絲釘也都是如此。

由於Θ的角速度相同,r的增加速度也就相同,這構成了阿基米德螺線的另一特性,極點往外畫一直線,與螺線的每個交點彼此間也必然等距,這也就是蚊香製作時,可以做到兩個蚊香互卡的原因;我在製作一些3D列印模型時,也會用上這個特性,例如,在3D列印機上製作互連不斷的鎖鍊,想盡可能地運用列印機平臺的空間,此時,就要使用阿基米德螺線。

然而,製作互連不斷的鎖鍊時,每個環的長度必須相同,在公式r=a+b*Θ下,建模時的Θ就不能是固定值了。若是固定值,隨著徑度等量的增加,計算出來的點與點間距離也會增加,為了能讓點與點間等距,必須找出徑度的增量,這並不難推導,有興趣的話,可以看看我的推導與OpenSCAD實作

順便一提的是,有個西奧多羅斯(Theodorus)螺線,螺線上的點與點之間,距離會固定是1,螺線的形狀也近似阿基米德螺線,但缺點是,只能到16段,也就是,最後一點與極點距離到sqrt(17)螺線,就停止了,然而,若需要的段數不多,這可以是個選擇。

球面的阿基米德螺線?

多年以來,我使用阿基米德螺線寫了不少3D建模程式,然而始終有個懸而未解的難題:「能不能在球面建立螺旋,經度上與螺線交接的點彼此間等距,螺線上各點彼此間等距?」

如果我們能夠解決上述這個問題,之後,就可以在球面執行繞字,不管字數有多少、球的半徑如何,字與字之間都會是等距,而不是越接近極點、就越密集。

乍看這種作法像是阿基米德螺線的延伸,而且,若使用「Archimedean spiral sphere」之類的關鍵字搜尋,能找到類似的圖片設計,不過,目前還是都未曾搜尋到公式,或是可參考的程式實作,想自己導證也遲未找到突破方式,直到最近,我湊巧看到了費式球(fibonacci sphere)的文件。

費式球是個在球面均勻散布點的方法,將點畫出來後,可以看到黃金螺線的樣子,既均勻又有螺線樣,當時,一度以為這麼做是我要的;然而,費式球的點順序其實是順著經度下滑一段,轉一個角度,再下滑再轉一個角度……直到另一個極點,但是,將這樣的點順序連接起來,並不構成螺線,要有螺線樣,必須跳著選取點,不過螺線下降過快,不符合我的需求。

然而這是個方向,在試著搜尋文件理解費式球的過程,我終於找到了鮑爾(Bauer)螺線,其實它與費式球目的類似,屬於球面上均勻散布點的研究範疇,只是我先前一直試圖尋找的方向不對,問題才會擱置如此多年。

鮑爾是在2000年提出了這個螺線,然而試著以「bauer spiral」搜尋,很難找到相關文件(以bauer為名的東西太多),必須以「bauer spiral point distribution」搜尋才可以。

你也可以直接參考〈Point Picking and Distributing on the Disc and Sphere〉,其中就談到鮑爾螺線,從文件名稱也可以看出,當中也探討了在盤上散布點的問題,在統計運算上若有類似需求,這是個不錯的參考。

更多的螺線與數學?

螺線的種類很多,在維基百科〈Spiral〉條目目前已經列了不少個,然而,別被公式迷惑了!因為,公式只是表現螺線的一種方式,螺線其實各有其特性與應用。或者說,數學一開始的本質,就是要解決問題,像是古代埃及幾何數學的發展,是為了解決尼羅河定期氾濫後,土地重新丈量的問題。

如果你正巧也需要某種螺線來解決問題,以上談到的內容可以是個線索,但是,請記得:不要單純從公式認識螺線,深入認識螺線的特性,而應該思考其特性可能的應用,如此一來,無論是想繪圖、建模,或是設計實體世界中的東西,都會有極大的幫助。

專欄作者

熱門新聞

Advertisement