在計算機科學(xué)中數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的基礎(chǔ)方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運行或者存儲效率。不同的數(shù)據(jù)結(jié)構(gòu)可以通過不同的數(shù)學(xué)建模來搭建起來,今天就和大家分享一個最基礎(chǔ)也是重要的數(shù)據(jù)結(jié)構(gòu)圖形:分形樹。
什么是分形樹呢?現(xiàn)實生活中植物的生長離不開生根、發(fā)芽、開花、結(jié)果,大樹也同樣如此,大樹由下到上主要分為四個部分:粗壯的樹根,樹根的上面則是分出來的樹干,樹干上又生長出很多小的樹枝,樹枝上才有了樹葉、花朵、果實等等。依照大樹的生長模型我們可以設(shè)計出分形樹的模樣。分形樹從樹干開始一直分叉,依照2的N次方公式進行分叉,每次分叉的過程中樹枝的長度都會有規(guī)律地減少,一直分叉到樹的末梢;所形成的分形樹為左右對稱的圖形,添加上對應(yīng)的顏色后宛如一棵真正的參天大樹。
了解了分形樹的介紹和圖形后,不知道你有沒有想到通過Scratch畫筆繪制出分形樹的思路呢?看到這里大家可以先暫停一下想一想你自己的思路與方法。下面請跟隨小陳老師分析的過程:其實分形樹的本質(zhì)就是利用遞歸函數(shù),首先確定初始的位置然后向上繪制樹干,樹干繪制完后,需要進行左右的分叉繪制樹枝,當然在繪制過程中畫筆不可能左右同時進行繪制,必須先繪制完一側(cè)的樹枝后,退回分叉點,回到原方向,再朝著另一側(cè)繪制。
這里為了方便理解,我用Scratch畫筆繪制出一個簡單的分形樹Y供大家參考,在舞臺區(qū)域用數(shù)字編號表示了繪制的過程,如果我們想繪制多個分支結(jié)構(gòu)的時候,就需要使用遞歸的思想了。
遞歸,指一種通過重復(fù)將問題分解為同類的子問題而解決問題的方法。
在分形樹中,我們需要新建一個自制積木來控制繪制樹丫分叉過程和繪制樹枝的長度。默認情況下我們將起始的樹枝長度設(shè)置為50,因為在旋轉(zhuǎn)移動的過程中,樹枝的長度是隨著分叉的過程不斷地減少。因此在自定義積木中便可以添加遞歸的過程,為了防止分形樹一直重復(fù)無止盡遞歸,需要添加控制的條件,當樹枝的長度小于10的時候停止遞歸,若滿足條件則將樹枝的長度減少10后繪制新的分叉。在減少樹枝長度的同時還可以通過修改顏色深度給分叉增加不一樣的特效。
除了遞歸的過程需要注意以外,我們還需注意畫筆旋轉(zhuǎn)的角度與方向,什么時候需要向左旋轉(zhuǎn),什么時候需要向右旋轉(zhuǎn),以及旋轉(zhuǎn)的角度的控制都有著嚴格的把控(旋轉(zhuǎn)角度和樹枝的長度并沒有一個固定的參數(shù),大家可以根據(jù)最終效果進行調(diào)整)。
利用Scratch的畫筆工具我們學(xué)習(xí)繪制出了基本的分形樹,當然有能力的同學(xué)還可以通過Python的Trutle庫結(jié)合遞歸的思想繪制出更多有創(chuàng)意的分形樹圖形,快去動手挑戰(zhàn)一下自己吧。