2007-02-11
碎形幾何內涵與 Logo 程式繪圖
文章論述/數位藝術
2007-02-11
本文是台灣美術館之「數位藝術知識與創作流通平台」的邀稿
http://www.digiarts.org.tw/
碎形幾何內涵與 Logo 程式繪圖
吳文成

  碎形(Fractal), 這個由數學家曼德布洛特(Benoit Mandelbrot)在七O年代所發展出的幾何概念,提供了藝術設計、科學理論、自然景象三方面的新關聯與新詮釋。碎形的深刻內涵促成了不同領域的結合。

  碎形一詞有破碎、不規則的含意,它用來研究邊線曲折、結構細膩、圖案複雜,但是卻具有「自我相似性」(self-similarity)的物件形態。諸如,自然界隨處可見的雪花晶體、樹幹枝椏、血管分支、海岸沿線、雲彩的邊緣以及天空的閃電——這些都是碎形,它們的特徵都是結構上一層又一層相類似的重複。我們可以仔細觀察一棵蒼茂大樹與它主幹上的樹枝、樹枝上的枝杈、葉脈的紋路,它們的形狀非常雷同,僅僅有大小與方位上的差異。這種關係在幾何學上稱為自我相似性,是碎形研究的核心。

  以附圖的蕨葉碎形、樹枝碎形來舉例。我們會發現小藍框是大藍框的標準縮小版,而且小藍框是由更多、更小的相似細節所構成,宛如把一整體縮小之後再嵌入自身那般。這種現象說明了碎形的幾個內涵。
  第一,碎形有無窮的細膩度。碎形呈現出結構的層層嵌套,每個結構可以不斷地分支再分支,無論如何放大碎形結構的局部,仍然是呈現出其相似的形態。碎形擁有無限,並且豐富的細節,這啟示我們不能只是觀察形態的外觀,形態的內部結構乃是曲折、複雜與奇異的。

  第二,碎形帶來局部/整體的革新性關係。碎形在大尺度(整體)與小尺度(局部)的自我相似,意味著局部元素帶有全整體的信息,就像是生物體這種大尺度的形態被紀錄在小尺度的基因裡一般,而基因的變動使得形態有截然不同的呈現。自我相似的關係,同時帶來結構的協同性。

  第三,碎形提供我們理解自然界形態生長的模式。從蕨葉、樹枝碎形在附圖的生成階段,我們看到它們是在分支上相似結構的疊加,最後變成複雜的樣式。這提示我們,自然界的系統演化、形態生長,其本質是具某種規則性的不斷疊代架構。這種規則性,物理學家稱之為起始元(initiator)與生成元(generator)的疊加關係。碎形提供了我們對於大自然的理解,這不僅是在靜態的幾何學上,還有動態性的形態變化。

***********************

  碎形幾何的內涵有很多,這裡只是挑出與本文相關的幾項出來。碎形是我們觀察世界的新視角,它不但推進當代混沌學、複雜性科學的研究,也深化我們瞭解大自然的諸多現象。不僅於此,碎形還豐富了音樂、美學、數位藝術的內容,與促成不同領域的合作。例如附圖就是電腦科學利用程式語言,採用碎形方法,模擬自然生態的結果,我們可稱為計算機仿真(computer simulation)。計算機仿真,亦是數位藝術感興趣的領域之一。

  附圖的蕨葉、樹枝繪製,是透過電腦的運算結合程式函數,經由不斷的遞迴執行,所產生的仿真圖形。它使用的程式語言是 Logo。 Logo 語言有許多版本,包括 MSW Logo、UCB Logo、Star Logo,以及國內發展出的 Gerlabau Logo、CLogo。我要推薦使用的是 MSW Logo(Microsoft Windows Logo),該下載點、教學網站與碎形範例等等,請見附檔。Logo 語言在美國是相當普遍的建構式繪圖教學的工具,它的繪圖主角是一隻小海龜(在 MSW Logo 簡化成一個小三角形)

  初學者可以不需要任何程式設計的知識而直接向海龜發送指令,這些指令包括前進、後退、左轉、右轉等,這些都是很直觀、形象化的方位概念。海龜繪圖(Turtle Graphics)讓 Logo 使用者可以通過簡單的指令,創作出多樣的視覺圖案。以較為複雜的蕨葉碎形為例,令人驚訝的是,它繪製圖形的程式碼非常簡短。碎形方法結合電腦程式繪圖,提供了我們從簡單程序,得到複雜形態的手段。蕨葉碎形的 Logo 程式碼,列出如下:

to main         ; 主程序
 draw 305
end
             ; 定義子程序
to draw :size      ; 此是遞迴程序
 IF :size<5 [Stop]   ; 條件判斷後,結束
 FD :size/25      ; FD 是前進
 LT 80 draw :size*.3  ; LT 是左轉
 RT 82 FD  :size/25  ; RT 是右轉
 RT 80 draw :size*.3  ; RT 80 之後,遞迴自己
 LT 78 draw :size*.9  ; LT 78 之後,遞迴自己
 LT 2 BK  :size/25  ; BK 是後退
 LT 2 BK  :size/25  ; LT 2 之後,BK 長度(size/25)
end


  這裡的程式碼指令只用到條件判斷(IF)與前進(Forward,簡寫 FD)、後退(Backward,簡寫 BK)、左轉(Left,簡寫 LT)與右轉( Right,簡寫 RT)。在分號開始的文字是註解,而 draw 是運用到遞迴(遞歸,recursion)方法的程序, 也就是反覆疊代(iteration)自己的模塊,用碎形的說法便是「自我相似」的那部分。文章篇幅所限,無法詳細介紹 Logo 程式指令,但是我必須要談剛剛提到的「遞迴/疊代」的實際效果是什麼,這會呼應到我前半部所說的重點部分。

  我們可以想像有一隻小海龜在螢幕上,按照遞迴程序而一下前進、後退,一下轉轉身子,直到完成一幅蕨葉。這裡的遞迴程序就是被不斷呼叫的 draw,它的輸入參數是 :size 。 draw 負責畫出不同大小的支葉, 同時小海龜也移動位置與角度,這使得整枝蕨葉呈現生動的弧度與絕妙的收尾。是否注意到每一支葉其實都是全體的縮小版?是的,遞迴的意義就在於此,即反覆地疊代自身,然後再以不同的角度、方位與大小加入整體之中,最後動態地組成一個整體。

  換句話說,「遞迴/疊代」的結果,使得蕨葉在不同尺度上「自我相似」,使得蕨葉有無窮的細膩度,並且自然地生長出來——這就是前面提到的碎形概念的幾個內涵。這些內涵,搭起了數位藝術、程式設計與大自然幾何形塑的溝通橋樑,一如本文開頭所說的,碎形提供了藝術設計、科學理論、自然景象三方面的新關聯與新詮釋。如果我們希望碎形的數位藝術創作能夠表達出適切的理念,並且繁衍其豐富性,那麼,瞭解碎形所傳達的意涵有哪些,便是創作者首先的功課。

延伸閱讀:
〈Logo 小海龜實現碎形繪圖程序〉
http://blog.xuite.net/sinner66/blog/9952555
〈DBN 結合 Logo 觀念以實現碎形〉
http://blog.xuite.net/sinner66/blog/11579881