資訊內容
【編程 | scratch】[02] 巧用scratch畫正多邊形
看了上次的scratch入門文章后,是不是感覺躍躍欲試了,上次我們體驗了scratch的畫筆功能,那我們今天就嘗試下用畫筆來畫幾何圖形吧。
上次用了畫筆工具后,編者興致盎然,一直想著用畫筆工具畫點什么?
本來想畫個三角形或正方形之類的,沒想到一發不可收拾,畫了很多很多正多邊形出來了,大家來欣賞下吧。
為了追求視覺上的統一,看起來沒那么雜亂,干脆在同一個圓內畫了這么多正多邊形。不過雖然看著很簡單,可是對小學生來說,實現起來可能還有點難度,因為這里面用到了若干三角函數的基礎知識。
我們先不管上面的視頻,我們先想想,如果要畫個正方形,我們要怎么做呢?
畫正方形如果只畫個小正方形的話,可能很簡單。
畫之前特意問了我家的小朋友,小朋友只是說正方形方方正正的,四條邊一樣長。
方方正正是個什么意思呢?用稍微書面點的文字來描述,正方形主要有兩點性質:
-
正方形有四條等長的邊
-
正方形的每個角是直角
當我們用scratch畫正方形的時候,就會牽涉到下面兩個問題:
-
連續畫4條線段
-
連續的2條線段是互相垂直的(直角)
?
“落筆”開始畫
回憶下上節課的內容,我們用畫筆工具畫線段的時候,是不是先要拿起畫筆往“舞臺區”上“落筆”呢?
如果我們不能確定“落筆”是什么意思,可以右擊“落筆”按鈕,然后再點擊旁邊所彈出的“幫助”按鈕,會看到“腳本區”上面會打開一個頁面,彈出如下提示和示例:
沒錯吧,“落筆”后再移動100步,小蟲子后面就會畫出一條線段。
?
畫線段
依樣畫葫蘆,我們也這樣搞,看看能不能畫出一條線段呢?
看到沒有,當我們點擊“旗幟”運行的時候,左邊“舞臺區”就畫上了一條藍色的線段。畫完以后我們“抬筆”,畫筆抬起來了,表示畫完了。
最后的“移到x:0 y:0”表示畫筆放回中心點,方便下次用。當然,還可以防止畫筆跑出了“舞臺區”。
?
畫直角
我們按照上面的方法,連續畫2條線段,2條線段之間形成一個夾角,怎么確保夾角是90度呢?
這里牽涉到角度的問題,小學低年級的小朋友可能還不知道轉一圈是360度,360度四等分成4個直角,每個直角就是90度。
我們知道了直角是90度后,用“運動模塊”里的右轉/左轉工具轉個90度再畫第2條線段,那這連續的2條線段形成的夾角就是直角。
我們調整下腳本。
哈哈,直角搞定了。
?
重復右轉4次搞定正方形
那我們再繼續轉幾次正方形不就搞定了?
?
利用循環控制來簡化腳本
這樣雖然搞定了,但腳本看起來有點重復,腳本里的移動100步都用了4次,還記得“控制”模塊里的“重復執行”功能嗎?我們用它來精簡下。
看起來是不是精簡些了呢?
畫個三角形?正方形搞定了,我們嘗試來畫個正三角形吧?!
和前面的區別,主要就是轉向的角度不一樣了吧,正方形是轉90度,三角形應該轉多少度呢?
?
三角形的性質
正三角形有哪些特性呢:
-
三條邊相等
-
三角形內角和是180度,正三角形每個角是60度
那我們連續畫線段的時候,是不是每次轉個60度,回到起點后,就把一個正三角形畫好了呢?
oh,my god!說好的三角形呢,怎么變成連續的幾條線段呢?不過線段看起來很有規律的,我們再多重復畫幾條試試吧。
?
失敗的三角形=六邊形
明明我們想畫個正三角形,可是畫出來的偏偏是個正六邊形?
想想,哪里搞錯了呢?原來呀,是我們的角度轉得不對。
真是無心插柳柳成蔭啊,我們明明想畫個正三角形,因為方向轉錯了,竟然畫出個正六邊形出來了。
其實啊,如果左轉120度(和右轉60度等價),畫出來的就是正三角形了吧。
?
正十二邊形
塞翁失馬,焉知禍福?我們本來想畫3條邊的正三角形,卻畫出了6條邊的正六邊形。如果我們把左轉的度數縮小一半到30度,把重復執行的次數增加一倍到12次,看看能畫出個什么來呢?
當然了,畫過一次后,我們發現舞臺區不大,得把移動的步伐縮小點,不然又畫出去了。
?
正二十四邊形
哈哈,繼續,正二十四邊形都出來了,有沒有發現什么規律了嗎?
?
圓
明明是想畫正48邊形的,為什么看起來這么像圓?其實小朋友不知道的是,我們古時候的祖沖之呀,計算圓周率的時候,就是用這樣的割圓術去逼近圓的。當正多邊形的邊數越來越大的時候,畫出來的圖形,越來越接近于圓。
?
找規律
小朋友學數學,要善于找規律。
我們畫了正六邊形、正12邊形、正24邊形、正48邊形,結合每次轉的角度,有沒有發現什么規律呢?
細心的小朋友可能還真發現了?我們把角度乘以邊的個數,怎么乘積都是360度呢?
如果是正三角形,那3條邊,左轉的角度應該是360/3=120度吧。
?
正三角形
還真是這樣,原來畫三角形的時候得左轉120度呢。
綜合上面所畫的正多邊形,其實我們發現了一個定理:
多邊形外角和等于360度
?
正N邊形
依賴于這個性質,我們就可以根據上面的腳本畫出任意正多邊形,譬如畫個正n邊形,那我們只要左轉360/n度就可以。
當然了,要控制下步數,免得畫到“舞臺區”外面去了。
組合成動畫?知道了制作各類多邊形后,那我怎么依次把這些正多邊形畫個遍呢?
當然了,從上節內容來看,多邊形邊數變大了,無非就是越來越像圓了,邊數大了后,憑我們的眼睛又看不出差別,所以啊,我們畫前面10多個正多邊形就好了。
那我們得想想,每次循環畫正多邊形的時候,多邊形的邊數是不是不斷變化的呢?這個要怎么實現?
?
變量
循環的時候不斷變化的值,我們可以存在變量里。
譬如,我們定義一個變量num,專門來存放正多邊形的邊數。
?
雙層循環控制
我們每次畫一個正多邊形num的時候,需要循環num次才能把該多邊形畫好,前面提到過,num變化的時候,我們也需要用一層循環來控制,那這樣就需要兩層循環來控制。
?
完整腳本
全部腳本如下所示:
?
動畫效果圖
為了看起來不至于太單調,每畫一邊的時候隨機設置了畫筆的顏色。
不知道大家有沒有發現,前面這個五彩繽紛的動畫,有一個一直不變的東西,那就是正多邊形的邊長,我們每次循環畫邊的時候,移動的步數都是30步吧。
那我們現在換一種方式,我們繪制所有的正多邊形,外接圓都重合的話要怎么畫呢?
什么叫外接圓重合呢,每個正多邊形的頂點共圓,我們要讓所有多邊形的頂點都在同一個外接圓上。
那這些正多邊形之間有哪些共同的特性呢?
?
不變的常量——外接圓半徑
所有正多邊形中,從圓心到任意一個多邊形的端點,也就是圓的半徑,一直是不變的。
還記得前面做的那個動圖,不變的是什么嗎?不變的是邊長。
為了方便在腳本里編寫調試,我們將這個不變的半徑設置成一個常量R。當然,在scratch里其實都是變量。
我們將邊數也設置成一個變量Num。
?
固定出發點,調整好繪制方向
為了方便繪制,我們計劃所有的正多邊形統一從坐標系中的某個點出發,譬如坐標系中的點E{x=0,y=R}。
在scratch中,我們每次繪制一個正多邊形的時候,都要將位置移動到{0,R}這個點,然后面朝某個方向開始繪制。
而對于正Num邊形來說,這里我們取Num=6,也就是我們以正六邊形為例。當我們把位置移動到{0,R}的時候,第一條線繪制的方向是不是線段DE的方向呢?
最初我們從圓心O{0,0}往上移動到E{0,R}的時候,是朝正北的,到了E點后,要轉向到ED的方向,如下圖所示:
通過上個動畫的制作,我們知道所有正多邊形的外角和是360度,所以每個正多邊形的內角是180-360/Num,所以從OE轉向DE,線段要面向的方向是180-(180-360/Num)/2=90+180/Num。對于正六邊形來說,就是要面向120度的方向。
?
邊長
在六邊形中,我們確定好起點E和方向后,我們還有確定好線段ED的長度。
其實,我們很容易知道角HOE為360/Num/2=180/Num。
根據正弦定理,易知線段EH=R*sin(180/Num),所以線段DE的長度就是線段EH的兩倍,也就是2R*sin(180/Num)。
?
右轉方向
線段ED繪制好了以后,我們從線段ED轉向線段DC,右轉的度數是不是一個外角那么大呢?外角和是360度,那這個外角就是360/Num。
那這樣循環Num次,正Num邊形是不是畫好了呢?
?
完整腳本
完整腳本如下所示:
完整效果圖如下,和前面的視頻相比,只是增加了隨機色而已。
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
