資訊內(nèi)容
【編程 | scratch】[02] 巧用scratch畫正多邊形
看了上次的scratch入門文章后,是不是感覺(jué)躍躍欲試了,上次我們體驗(yàn)了scratch的畫筆功能,那我們今天就嘗試下用畫筆來(lái)畫幾何圖形吧。
上次用了畫筆工具后,編者興致盎然,一直想著用畫筆工具畫點(diǎn)什么?
本來(lái)想畫個(gè)三角形或正方形之類的,沒(méi)想到一發(fā)不可收拾,畫了很多很多正多邊形出來(lái)了,大家來(lái)欣賞下吧。
為了追求視覺(jué)上的統(tǒng)一,看起來(lái)沒(méi)那么雜亂,干脆在同一個(gè)圓內(nèi)畫了這么多正多邊形。不過(guò)雖然看著很簡(jiǎn)單,可是對(duì)小學(xué)生來(lái)說(shuō),實(shí)現(xiàn)起來(lái)可能還有點(diǎn)難度,因?yàn)檫@里面用到了若干三角函數(shù)的基礎(chǔ)知識(shí)。
我們先不管上面的視頻,我們先想想,如果要畫個(gè)正方形,我們要怎么做呢?
畫正方形如果只畫個(gè)小正方形的話,可能很簡(jiǎn)單。
畫之前特意問(wèn)了我家的小朋友,小朋友只是說(shuō)正方形方方正正的,四條邊一樣長(zhǎng)。
方方正正是個(gè)什么意思呢?用稍微書面點(diǎn)的文字來(lái)描述,正方形主要有兩點(diǎn)性質(zhì):
-
正方形有四條等長(zhǎng)的邊
-
正方形的每個(gè)角是直角
當(dāng)我們用scratch畫正方形的時(shí)候,就會(huì)牽涉到下面兩個(gè)問(wèn)題:
-
連續(xù)畫4條線段
-
連續(xù)的2條線段是互相垂直的(直角)
?
“落筆”開始畫
回憶下上節(jié)課的內(nèi)容,我們用畫筆工具畫線段的時(shí)候,是不是先要拿起畫筆往“舞臺(tái)區(qū)”上“落筆”呢?
如果我們不能確定“落筆”是什么意思,可以右擊“落筆”按鈕,然后再點(diǎn)擊旁邊所彈出的“幫助”按鈕,會(huì)看到“腳本區(qū)”上面會(huì)打開一個(gè)頁(yè)面,彈出如下提示和示例:

沒(méi)錯(cuò)吧,“落筆”后再移動(dòng)100步,小蟲子后面就會(huì)畫出一條線段。
?
畫線段
依樣畫葫蘆,我們也這樣搞,看看能不能畫出一條線段呢?

看到?jīng)]有,當(dāng)我們點(diǎn)擊“旗幟”運(yùn)行的時(shí)候,左邊“舞臺(tái)區(qū)”就畫上了一條藍(lán)色的線段。畫完以后我們“抬筆”,畫筆抬起來(lái)了,表示畫完了。
最后的“移到x:0 y:0”表示畫筆放回中心點(diǎn),方便下次用。當(dāng)然,還可以防止畫筆跑出了“舞臺(tái)區(qū)”。
?
畫直角
我們按照上面的方法,連續(xù)畫2條線段,2條線段之間形成一個(gè)夾角,怎么確保夾角是90度呢?
這里牽涉到角度的問(wèn)題,小學(xué)低年級(jí)的小朋友可能還不知道轉(zhuǎn)一圈是360度,360度四等分成4個(gè)直角,每個(gè)直角就是90度。
我們知道了直角是90度后,用“運(yùn)動(dòng)模塊”里的右轉(zhuǎn)/左轉(zhuǎn)工具轉(zhuǎn)個(gè)90度再畫第2條線段,那這連續(xù)的2條線段形成的夾角就是直角。
我們調(diào)整下腳本。

哈哈,直角搞定了。
?
重復(fù)右轉(zhuǎn)4次搞定正方形
那我們?cè)倮^續(xù)轉(zhuǎn)幾次正方形不就搞定了?

?
利用循環(huán)控制來(lái)簡(jiǎn)化腳本
這樣雖然搞定了,但腳本看起來(lái)有點(diǎn)重復(fù),腳本里的移動(dòng)100步都用了4次,還記得“控制”模塊里的“重復(fù)執(zhí)行”功能嗎?我們用它來(lái)精簡(jiǎn)下。

看起來(lái)是不是精簡(jiǎn)些了呢?
畫個(gè)三角形?正方形搞定了,我們嘗試來(lái)畫個(gè)正三角形吧?!
和前面的區(qū)別,主要就是轉(zhuǎn)向的角度不一樣了吧,正方形是轉(zhuǎn)90度,三角形應(yīng)該轉(zhuǎn)多少度呢?
?
三角形的性質(zhì)
正三角形有哪些特性呢:
-
三條邊相等
-
三角形內(nèi)角和是180度,正三角形每個(gè)角是60度
那我們連續(xù)畫線段的時(shí)候,是不是每次轉(zhuǎn)個(gè)60度,回到起點(diǎn)后,就把一個(gè)正三角形畫好了呢?

oh,my god!說(shuō)好的三角形呢,怎么變成連續(xù)的幾條線段呢?不過(guò)線段看起來(lái)很有規(guī)律的,我們?cè)俣嘀貜?fù)畫幾條試試吧。
?
失敗的三角形=六邊形
明明我們想畫個(gè)正三角形,可是畫出來(lái)的偏偏是個(gè)正六邊形?
想想,哪里搞錯(cuò)了呢?原來(lái)呀,是我們的角度轉(zhuǎn)得不對(duì)。

真是無(wú)心插柳柳成蔭啊,我們明明想畫個(gè)正三角形,因?yàn)榉较蜣D(zhuǎn)錯(cuò)了,竟然畫出個(gè)正六邊形出來(lái)了。
其實(shí)啊,如果左轉(zhuǎn)120度(和右轉(zhuǎn)60度等價(jià)),畫出來(lái)的就是正三角形了吧。
?
正十二邊形
塞翁失馬,焉知禍福?我們本來(lái)想畫3條邊的正三角形,卻畫出了6條邊的正六邊形。如果我們把左轉(zhuǎn)的度數(shù)縮小一半到30度,把重復(fù)執(zhí)行的次數(shù)增加一倍到12次,看看能畫出個(gè)什么來(lái)呢?
當(dāng)然了,畫過(guò)一次后,我們發(fā)現(xiàn)舞臺(tái)區(qū)不大,得把移動(dòng)的步伐縮小點(diǎn),不然又畫出去了。

?
正二十四邊形
哈哈,繼續(xù),正二十四邊形都出來(lái)了,有沒(méi)有發(fā)現(xiàn)什么規(guī)律了嗎?

?
圓
明明是想畫正48邊形的,為什么看起來(lái)這么像圓?其實(shí)小朋友不知道的是,我們古時(shí)候的祖沖之呀,計(jì)算圓周率的時(shí)候,就是用這樣的割圓術(shù)去逼近圓的。當(dāng)正多邊形的邊數(shù)越來(lái)越大的時(shí)候,畫出來(lái)的圖形,越來(lái)越接近于圓。

?
找規(guī)律
小朋友學(xué)數(shù)學(xué),要善于找規(guī)律。
我們畫了正六邊形、正12邊形、正24邊形、正48邊形,結(jié)合每次轉(zhuǎn)的角度,有沒(méi)有發(fā)現(xiàn)什么規(guī)律呢?

細(xì)心的小朋友可能還真發(fā)現(xiàn)了?我們把角度乘以邊的個(gè)數(shù),怎么乘積都是360度呢?
如果是正三角形,那3條邊,左轉(zhuǎn)的角度應(yīng)該是360/3=120度吧。
?
正三角形
還真是這樣,原來(lái)畫三角形的時(shí)候得左轉(zhuǎn)120度呢。


綜合上面所畫的正多邊形,其實(shí)我們發(fā)現(xiàn)了一個(gè)定理:
多邊形外角和等于360度
?
正N邊形
依賴于這個(gè)性質(zhì),我們就可以根據(jù)上面的腳本畫出任意正多邊形,譬如畫個(gè)正n邊形,那我們只要左轉(zhuǎn)360/n度就可以。
當(dāng)然了,要控制下步數(shù),免得畫到“舞臺(tái)區(qū)”外面去了。
組合成動(dòng)畫?知道了制作各類多邊形后,那我怎么依次把這些正多邊形畫個(gè)遍呢?
當(dāng)然了,從上節(jié)內(nèi)容來(lái)看,多邊形邊數(shù)變大了,無(wú)非就是越來(lái)越像圓了,邊數(shù)大了后,憑我們的眼睛又看不出差別,所以啊,我們畫前面10多個(gè)正多邊形就好了。
那我們得想想,每次循環(huán)畫正多邊形的時(shí)候,多邊形的邊數(shù)是不是不斷變化的呢?這個(gè)要怎么實(shí)現(xiàn)?
?
變量
循環(huán)的時(shí)候不斷變化的值,我們可以存在變量里。
譬如,我們定義一個(gè)變量num,專門來(lái)存放正多邊形的邊數(shù)。

?
雙層循環(huán)控制
我們每次畫一個(gè)正多邊形num的時(shí)候,需要循環(huán)num次才能把該多邊形畫好,前面提到過(guò),num變化的時(shí)候,我們也需要用一層循環(huán)來(lái)控制,那這樣就需要兩層循環(huán)來(lái)控制。
?
完整腳本
全部腳本如下所示:

?
動(dòng)畫效果圖
為了看起來(lái)不至于太單調(diào),每畫一邊的時(shí)候隨機(jī)設(shè)置了畫筆的顏色。

不知道大家有沒(méi)有發(fā)現(xiàn),前面這個(gè)五彩繽紛的動(dòng)畫,有一個(gè)一直不變的東西,那就是正多邊形的邊長(zhǎng),我們每次循環(huán)畫邊的時(shí)候,移動(dòng)的步數(shù)都是30步吧。
那我們現(xiàn)在換一種方式,我們繪制所有的正多邊形,外接圓都重合的話要怎么畫呢?
什么叫外接圓重合呢,每個(gè)正多邊形的頂點(diǎn)共圓,我們要讓所有多邊形的頂點(diǎn)都在同一個(gè)外接圓上。
那這些正多邊形之間有哪些共同的特性呢?
?
不變的常量——外接圓半徑
所有正多邊形中,從圓心到任意一個(gè)多邊形的端點(diǎn),也就是圓的半徑,一直是不變的。
還記得前面做的那個(gè)動(dòng)圖,不變的是什么嗎?不變的是邊長(zhǎng)。
為了方便在腳本里編寫調(diào)試,我們將這個(gè)不變的半徑設(shè)置成一個(gè)常量R。當(dāng)然,在scratch里其實(shí)都是變量。
我們將邊數(shù)也設(shè)置成一個(gè)變量Num。

?
固定出發(fā)點(diǎn),調(diào)整好繪制方向
為了方便繪制,我們計(jì)劃所有的正多邊形統(tǒng)一從坐標(biāo)系中的某個(gè)點(diǎn)出發(fā),譬如坐標(biāo)系中的點(diǎn)E{x=0,y=R}。
在scratch中,我們每次繪制一個(gè)正多邊形的時(shí)候,都要將位置移動(dòng)到{0,R}這個(gè)點(diǎn),然后面朝某個(gè)方向開始繪制。
而對(duì)于正Num邊形來(lái)說(shuō),這里我們?nèi)um=6,也就是我們以正六邊形為例。當(dāng)我們把位置移動(dòng)到{0,R}的時(shí)候,第一條線繪制的方向是不是線段DE的方向呢?
最初我們從圓心O{0,0}往上移動(dòng)到E{0,R}的時(shí)候,是朝正北的,到了E點(diǎn)后,要轉(zhuǎn)向到ED的方向,如下圖所示:

通過(guò)上個(gè)動(dòng)畫的制作,我們知道所有正多邊形的外角和是360度,所以每個(gè)正多邊形的內(nèi)角是180-360/Num,所以從OE轉(zhuǎn)向DE,線段要面向的方向是180-(180-360/Num)/2=90+180/Num。對(duì)于正六邊形來(lái)說(shuō),就是要面向120度的方向。
?
邊長(zhǎng)
在六邊形中,我們確定好起點(diǎn)E和方向后,我們還有確定好線段ED的長(zhǎng)度。
其實(shí),我們很容易知道角HOE為360/Num/2=180/Num。
根據(jù)正弦定理,易知線段EH=R*sin(180/Num),所以線段DE的長(zhǎng)度就是線段EH的兩倍,也就是2R*sin(180/Num)。
?
右轉(zhuǎn)方向
線段ED繪制好了以后,我們從線段ED轉(zhuǎn)向線段DC,右轉(zhuǎn)的度數(shù)是不是一個(gè)外角那么大呢?外角和是360度,那這個(gè)外角就是360/Num。
那這樣循環(huán)Num次,正Num邊形是不是畫好了呢?
?
完整腳本
完整腳本如下所示:

完整效果圖如下,和前面的視頻相比,只是增加了隨機(jī)色而已。

聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過(guò)郵件及時(shí)和我們聯(lián)系刪除
