斐波那契數(shù)列又稱(chēng)黃金分割數(shù)列,而斐波那契螺旋線(xiàn)是在斐波那契數(shù)列為邊長(zhǎng)的一系列正方形中繪制一個(gè)90度的弧線(xiàn),將這些弧線(xiàn)連接起來(lái)組成的一條漂亮的螺旋線(xiàn),又稱(chēng)為“黃金螺旋”。自然界中存在許多“黃金螺旋”的圖案,不得不感嘆大自然的鬼斧神工(圖1)。
先思考斐波那契螺旋線(xiàn)的繪制算法,需要產(chǎn)生符合斐波那契數(shù)列的數(shù)字(0,1,1,2,3,5,8,13……),這個(gè)數(shù)列可以用遞歸的方法定義F0=0,F(xiàn)1=1,F(xiàn)n=F(n-1)+F(n-2)。接著按這個(gè)數(shù)列繪制出對(duì)應(yīng)邊長(zhǎng)的正方形并拼接在一起,然后繪制出對(duì)應(yīng)的弧度進(jìn)行組合完成“黃金螺旋”。
接下來(lái)思考用Scratch完成這個(gè)算法需要將繪制過(guò)程分為幾個(gè)步驟。對(duì)應(yīng)分成三個(gè)步驟:1.繪制正方形;2.計(jì)算斐波那契數(shù)列;3.繪制弧線(xiàn)(圖2)。
開(kāi)始編程,刪除小貓角色,新增鉛筆角色用于繪制正方形,在繪制前先在造型中將筆尖的位置調(diào)整到中心。初始化畫(huà)筆的粗細(xì)、角色大小、抬筆狀態(tài)。接下來(lái)考慮需要使用的變量,變量有三個(gè):“正方形的邊長(zhǎng)”,從圖中觀察到初始值是1;為了用遞歸產(chǎn)生斐波那契數(shù)列的數(shù)字,還需變量F1初始值0和F2初始值1。圖中有六個(gè)正方形,所以可以定義循環(huán)重復(fù)執(zhí)行6次(也可以手動(dòng)輸入其他循環(huán)次數(shù))。增加兩個(gè)自制積木:“繪制正方形”和“計(jì)算斐波那契數(shù)列”;正方形的繪制比較簡(jiǎn)單,就不細(xì)說(shuō)了,用(“正方形的邊長(zhǎng)”×30)讓正方形大小更好看。需要注意一個(gè)細(xì)節(jié),畫(huà)完一個(gè)正方形后下一個(gè)正方形的起點(diǎn)不是在上一個(gè)正方形的終點(diǎn),圖2中綠色箭頭標(biāo)注的就是前三個(gè)正方形的起點(diǎn),仔細(xì)分析知道畫(huà)完后還要移動(dòng)兩次。繪制完一個(gè)正方形后用自制積木“計(jì)算斐波那契數(shù)列”計(jì)算出下一個(gè)正方形的邊長(zhǎng)。到這一步結(jié)束后,我們已經(jīng)完成了所有正方形框的繪制。接下來(lái)是對(duì)弧線(xiàn)進(jìn)行繪制了(圖3)。
正方形用藍(lán)色繪制,螺旋用紅色繪制,所以需要?jiǎng)?chuàng)建一個(gè)新的空白角色用于繪制螺旋線(xiàn)。初始化畫(huà)筆粗細(xì)、起始位置、抬筆狀態(tài)?;【€(xiàn)角度為90度,重復(fù)執(zhí)行10次,每次右旋轉(zhuǎn)9度。確定旋轉(zhuǎn)時(shí)移動(dòng)的步數(shù)要稍微難一些。直接告訴你答案,這里用(“正方形的邊長(zhǎng)”×30×0.154)。為什么是0.154倍呢?本來(lái)移動(dòng)步長(zhǎng)應(yīng)該為以正方形邊長(zhǎng)為半徑的弧線(xiàn)長(zhǎng)的十分之一(πr/2÷10=0.157r),不過(guò)考慮到畫(huà)筆還有3的粗細(xì),所以經(jīng)過(guò)調(diào)整為0.154倍邊長(zhǎng)。
“黃金螺旋”只是數(shù)學(xué)中的六大經(jīng)典螺旋之一,還有“費(fèi)馬螺旋、阿基米德螺旋、雙曲螺旋”都是非常有意思的圖形,大家也可以去嘗試挑戰(zhàn)一下自己哦。