還真有點生成式藝術的fu

2023/09/04閱讀時間約 2 分鐘

跑程式時,畫出了漂亮的圖。下面是程式執行當中,先後擷取出來的兩張截圖。

raw-image
raw-image

這圖看著挺漂亮的,重點是,你可以看著螢幕畫面從一片空白,然後一條線一條線的不斷變化、發展,而且除非中斷程式,它可以就這麼永不停止地畫下去。不過說是這麼說,畫到最後應該看起來就會是黑黑的一塊而已,畢竟螢幕的解析度有限。

這個圖案其實是模擬兩大兩小四個物體,大的叫attractor,小的叫mover,在萬有引力的作用下,那兩個比較小的物體的運動軌跡。不過這是個簡化了的模擬,這裡的引力只發生在大物體和小物體之間,大物體和大物體、小物體和小物體之間,是沒有引力的。

會畫出這樣的圖案,完全是意料之外的事,因為變數實在太多了,從attractor和mover的數量和它們本身質量的大小,到它們所在的位置,以及萬有引力常數的大小,無不影響圖案的長相。一開始是用亂數隨便擺幾個attractor和mover,結果跑出來的圖案只能用慘不忍睹來形容,就亂糟糟的一團,活像被調皮的小貓咪蹂躪過的毛線團。

畫了老半天都畫不出至少可以看的圖案,突然想到Lorenz attractor那個像是蝴蝶展翅的漂亮圖案。「如果只用兩個attractor和兩個mover,說不定可以畫出類似的圖案。」一面想著,一面就試著畫看看。

嘿!蝴蝶展翅沒畫成,沒想到倒是出現了前面兩張截圖那樣的圖案。那個直立的桶子是其中一個mover的軌跡,而腰帶部分,則是另一個mover的軌跡。如果仔細觀察,可以發現所有的軌跡都沒有重複。所以囉,如果一直畫個不停,那個圖案最後看起來應該會是黑壓壓的一片。這也就是說,用一維的線,可以把二維的面給填滿,然後那個介於一維和二維之間的分數維度就冒出來了。碎形(fractal)很多迷人的圖案都有這種特性。

身為頂級藝術細胞缺乏者,總是非常羨慕那些能隨手畫出漂亮圖畫的人。看著自己寫的程式在螢幕上展現出事先無法預期的漂亮圖案,還真是很有成就感,也不免有些興奮地想著:「嘿!看來頂級藝術細胞缺乏者有藥醫了!」

畫那兩張圖的主程式放在《The Nature of Code閱讀心得筆記——使用Python實作》第二章2.9節練習2.8。除了主程式之外,還需要Mover和Attractor這兩個class。這兩個class的程式碼可以在2.5和2.9節找到。

要結束這篇隨筆時,又忍不住手癢,創作了另一個漂亮的圖案,這次還加了點顏色上去。

raw-image
raw-image


13會員
86內容數
寫點東西自娛娛人
留言0
查看全部
發表第一個留言支持創作者!