迷人的fractal圖案

更新於 發佈於 閱讀時間約 4 分鐘
解決了Spyder和turtle之間的不合後,就來畫些漂亮迷人的fractal圖案,也順便練習一下recursive function的寫法。
fractal最重要的性質就是self similarity,也就是不管是近看、遠看、縮小來看、放大來看、切一部份來看,它都是一個樣兒。所以recursive function是最適合用來畫fractal圖案的了。當然啦,最適合不代表唯一,不用recursion的方式來寫,還是可以畫得出來,有許多程式語言並不支援recursion,一樣可以做得到。
第一個畫的是Sierpinski triangle。畫法是把一個三角形中間挖個洞,然後再把剩下的所有三角形中間挖個洞,就這樣一直重複到滿意為止。
接下來畫的是Barnsley fern。這個比較簡單,就只是同樣的數學式子不斷迭代而已,不需用到recursion。雖然就只是幾條數學式子而已,但透過不斷迭代產生的結果,卻可以畫出以假亂真的蕨類圖案,這實在是太神奇了!
再來是fractal tree。設定好樹枝的長度和分叉的角度,以及分叉後的長度比例,就可以畫出一棵醜醜的雖然不像,但還是有那麼一點樣子的樹。如果讓樹枝多一點,看起來還真是有那麼些個異星植物的感覺。
一棵光禿禿沒有葉子的樹,看起來實在是蕭瑟寂寥,長些翠綠的葉子應該會有生氣一些。雖然Barnsley fern是蕨類,不過將就一點,就讓它長在樹上。那要怎麼個長法呢?原始的Barnsley fern是直立的,如果就那麼直接長在樹枝上,那說有多怪就有多怪,真正的樹葉可不會這麼長法。不如轉個角度,沿著樹枝的方向長。原始的Barnsley fern是從座標(0, 0)向上長的,只要繞著(0, 0)轉到想要的角度就可以了,高中數學就可以推導出需要的數學式。當然啦,網路上也查得到。
有翠綠葉子的樹,看起來就是不一樣。不過……這怎麼還是感覺怪怪的,不太對勁。
唉呦!這樹葉怎麼都朝順時鐘方向彎?難怪看起來怪怪的。讓在左半邊的葉子逆時鐘方向長好了,這樣看起來應該會自然一些。說是這麼說,不過要怎麼讓葉子逆時鐘方向長呢?既然現在葉子是沿著樹枝的方向長,那以樹枝的延長線為軸,把葉子翻面,應該就能達到目的了。用比較精確的數學語言來說,就是要找出葉子在樹枝延長線上的鏡像。這個也是高中數學就能辦到,網路上當然也找得到推導的方式。不過網路上找到的式子,是針對一般化的情況推導出來的,也就是那條軸線並不一定會通過原點,所以式子還真是有點複雜。在網頁上看數學式子簡直就是虐待人,除非那個網站有提供漂亮的數學排版功能。看到那一大串沒有數學排版功能寫出來的數學式子,把心一橫,乾脆自己推導好了。自己推導的好處是,可以針對需要的特殊狀況先簡化,而在推導的過程中,也可以一併想想要把式子寫成怎樣的形式,在最後寫程式的時候,可以寫得比較簡潔易懂又有效率。
數學式子推導出來了,雖然還是一串,但已經簡化了不少,而且相同的計算式,也都用同一個變數來表示,這樣寫程式的時候輕鬆多了。就在要動手寫程式的時候,突然想到:啊!幹嘛推導得這麼辛苦?先找出原始的Barnsley fern在y軸的鏡像,然後轉到需要的角度就可以了啊!要找出一個點在y軸的鏡像,就只需要把x座標乘上-1,也就是正變負或負變正就可以了,而旋轉角度的問題先前就解決了。所以啊,要讓葉子逆時鐘方向長,根本就不需要額外再做什麼事就能辦到。想想也真是好玩,就只是調整一下處理問題的方式和步驟,居然就能把原本需要費九牛二虎之力才能解決的問題,不費吹灰之力地處理掉。
現在左半邊的葉子逆時鐘方向長,看起來果然自然多了。不過俗話說:紅配綠,最美麗。有了綠綠的葉子,怎麼可以沒有紅紅的果子呢?讓每片葉子的葉柄前面長顆紅紅的果子好了。
就這樣,一幅由毫無藝術細胞的人所創作的曠世程式畫作,宣告完成!
為什麼會看到廣告
avatar-img
15會員
131內容數
寫點東西自娛娛人
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
ysf的沙龍 的其他內容
龜兔賽跑,第一回合兔子因為太輕敵,在半路上呼呼大睡睡過頭,輸了比賽。 雖然輸了第一回合的比賽,不過兔子並沒有灰心喪志,牠記取教訓,買了個功能齊全的運動手錶來戴,睡覺前先定好鬧鐘時間,這樣就不怕睡過頭而輸了比賽。從此龜兔賽跑,兔子照樣在半路上睡覺補充體力,但再也沒有因為睡過頭而輸了比賽。
「學程式,數學要很好嗎?」這問題的答案其實很簡單,就是:Yes and no。
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
唉!這user可真難伺候啊~~~
Game of Life的輸出結果,也就是每代演化後universe的長相,程式要怎麼寫呢?現在有個二維list,裡頭放的是一堆0和1,要怎麼樣用西洋棋盤式的方式來顯示呢?這看來勢必得用到別人寫好的module來做,才能省時、省力又漂亮。第一個想到的,當然就是matplotlib這個科學繪圖用的mo
龜兔賽跑,第一回合兔子因為太輕敵,在半路上呼呼大睡睡過頭,輸了比賽。 雖然輸了第一回合的比賽,不過兔子並沒有灰心喪志,牠記取教訓,買了個功能齊全的運動手錶來戴,睡覺前先定好鬧鐘時間,這樣就不怕睡過頭而輸了比賽。從此龜兔賽跑,兔子照樣在半路上睡覺補充體力,但再也沒有因為睡過頭而輸了比賽。
「學程式,數學要很好嗎?」這問題的答案其實很簡單,就是:Yes and no。
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
唉!這user可真難伺候啊~~~
Game of Life的輸出結果,也就是每代演化後universe的長相,程式要怎麼寫呢?現在有個二維list,裡頭放的是一堆0和1,要怎麼樣用西洋棋盤式的方式來顯示呢?這看來勢必得用到別人寫好的module來做,才能省時、省力又漂亮。第一個想到的,當然就是matplotlib這個科學繪圖用的mo
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
玩過插枝嗎?植物最讓人覺得厲害的地方就是,只要剪下一條枝條插進土裡,過一段時間就會長成一株新的植物。 是否想過,為什麼新的根總是從枝條切斷處長出來,而不是更高的地方呢?最近的研究,解開了這個謎題。
Thumbnail
畫作越來越多的時候,總是想要畫得更好,以前覺得畫鳥就是畫鳥,背景不太重要,但往後發現原來有背景加入會讓畫面豐富一點,哪怕只是一條好看的樹枝。
Thumbnail
題目敘述 Binary Tree Maximum Path Sum 給定一個二元樹,請找出最大的區間路徑和是多少? 註: 區間路徑和 = 某個節點a -> 某個節點b的路徑節點值總和。
Thumbnail
這禮拜作品非常綠意盎然,整個過程都在做手工藝,對初學者來說要將水苔纏繞成圓球狀有點困難。
Thumbnail
第一次從便利商店包裹收到朋友寄來的禮物,竟然是鹿角蕨,太神奇了。想都沒想過會在小七與它相遇。 鹿角蕨(Staghorn Fern)是一種觀賞蕨類植物,因其葉片形狀像鹿角而得名。近年來,鹿角蕨成為了一種流行的室內植物,受到許多植物愛好者的喜愛。這股風潮可以歸因於以下幾個原因: 獨特的外觀:鹿角蕨的
Thumbnail
以前是讀景觀系,說什麼也跟植物蠻有相關, 但從來沒什麼興趣種植栽或養活植物, 因好同事兼好朋友K搬來我的住家附近, 要在新家注入一點植栽景觀, 就突然我也一起買了一株植苔球, 本座是秘魯銀幣鐵線蕨,好複雜的名字, 喜水但不能過濕會爛根, 要通風又不能吹風,也不能太熱, 以為是
Thumbnail
題目敘述 題目會給定一棵二元樹的根結點, 要求我們計算滿足局部路徑節點和=targetSum的數目有多少? 註: 局部路徑節點和 =由節點a往下走到某個節點b,這個區間內的節點值總和 題目的原文敘述 測試範例 Example 1: Input: root = [10,5,-3,3
Thumbnail
題目敘述 題目會給定一棵二元樹的根結點,要求我們判定這是否為一顆合法的奇偶二元樹? 奇偶二元樹的定義: 從上到下依序是第0層、第一層、...、第n層 偶數層裡面的節點值都必須是奇數,而且由左到右嚴格遞增。 奇數層裡面的節點值都必須是偶數,而且由左到右嚴格遞減。 題目的原文敘述 測試
Thumbnail
《筆記大自然》 實作#1 之前有跟台東藝術家—傳莉老師學畫,讓我對花草產生了興趣。 但自己太愛好自由, 老師建議我先很單純的畫畫, 今早嘗試書中的方法, 走出戶外, 看到什麼就畫吧! 我其實對植物是小白, 只知道簡單的桂花、酢醬草。 其他真的都不知道,
Thumbnail
了解如何製作可愛的小樹 - 枝幹番杏,包括所需材料和工具,製作方法以及製作心得。如果你也喜歡,可以試著做做看吧,讓可愛的小樹慢慢長大。
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
玩過插枝嗎?植物最讓人覺得厲害的地方就是,只要剪下一條枝條插進土裡,過一段時間就會長成一株新的植物。 是否想過,為什麼新的根總是從枝條切斷處長出來,而不是更高的地方呢?最近的研究,解開了這個謎題。
Thumbnail
畫作越來越多的時候,總是想要畫得更好,以前覺得畫鳥就是畫鳥,背景不太重要,但往後發現原來有背景加入會讓畫面豐富一點,哪怕只是一條好看的樹枝。
Thumbnail
題目敘述 Binary Tree Maximum Path Sum 給定一個二元樹,請找出最大的區間路徑和是多少? 註: 區間路徑和 = 某個節點a -> 某個節點b的路徑節點值總和。
Thumbnail
這禮拜作品非常綠意盎然,整個過程都在做手工藝,對初學者來說要將水苔纏繞成圓球狀有點困難。
Thumbnail
第一次從便利商店包裹收到朋友寄來的禮物,竟然是鹿角蕨,太神奇了。想都沒想過會在小七與它相遇。 鹿角蕨(Staghorn Fern)是一種觀賞蕨類植物,因其葉片形狀像鹿角而得名。近年來,鹿角蕨成為了一種流行的室內植物,受到許多植物愛好者的喜愛。這股風潮可以歸因於以下幾個原因: 獨特的外觀:鹿角蕨的
Thumbnail
以前是讀景觀系,說什麼也跟植物蠻有相關, 但從來沒什麼興趣種植栽或養活植物, 因好同事兼好朋友K搬來我的住家附近, 要在新家注入一點植栽景觀, 就突然我也一起買了一株植苔球, 本座是秘魯銀幣鐵線蕨,好複雜的名字, 喜水但不能過濕會爛根, 要通風又不能吹風,也不能太熱, 以為是
Thumbnail
題目敘述 題目會給定一棵二元樹的根結點, 要求我們計算滿足局部路徑節點和=targetSum的數目有多少? 註: 局部路徑節點和 =由節點a往下走到某個節點b,這個區間內的節點值總和 題目的原文敘述 測試範例 Example 1: Input: root = [10,5,-3,3
Thumbnail
題目敘述 題目會給定一棵二元樹的根結點,要求我們判定這是否為一顆合法的奇偶二元樹? 奇偶二元樹的定義: 從上到下依序是第0層、第一層、...、第n層 偶數層裡面的節點值都必須是奇數,而且由左到右嚴格遞增。 奇數層裡面的節點值都必須是偶數,而且由左到右嚴格遞減。 題目的原文敘述 測試
Thumbnail
《筆記大自然》 實作#1 之前有跟台東藝術家—傳莉老師學畫,讓我對花草產生了興趣。 但自己太愛好自由, 老師建議我先很單純的畫畫, 今早嘗試書中的方法, 走出戶外, 看到什麼就畫吧! 我其實對植物是小白, 只知道簡單的桂花、酢醬草。 其他真的都不知道,
Thumbnail
了解如何製作可愛的小樹 - 枝幹番杏,包括所需材料和工具,製作方法以及製作心得。如果你也喜歡,可以試著做做看吧,讓可愛的小樹慢慢長大。