少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

在本文中,我們將完成一個“正弦曲線與圓周運動關係原理”的數學原理演示動畫。

正弦曲線或正弦波(Sinusoid/Sine wave)是一種來自數學三角函數中的正弦比例的曲線。

正弦曲線的形狀就像完美的海上波浪般,以三角函數正弦比例改變而形成。

標準的純正弦函數公式為:

y=sin(x)

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

而一般應用的正弦曲線公式為:

y=Asin(ωt+θ)

其中,sin為正弦符號,A為波幅(縱軸),ω為角頻率,t為時間(橫軸),θ為相偏移(橫軸左右)。

—— wikipedia


好了,初中數學知識複習就到這裡。

下面我們開始這次的編程內容吧。數學書在講解正弦曲線的含義時提到,“正弦波是一個圓周運動在直線上的投影”,這個定義並不容易理解,不如我們編寫一個程序,動態的演示這個過程,幫助初中生們理解吧~


少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

00 軟件分析

需求說明:

編寫一個動畫程序,有一個點在勻速的圍繞圓運動,有另外一個點在x軸上勻速運動、同時在y軸上與前一個點的高度一致。最好留下這兩個點的運動軌跡。

由以上內容描述,我們可以將需求人為拆分成兩部分,第一步,畫一個圓;第二步,畫正弦波。這就用到了《Scratch視頻課程1|什麼是少兒編程、為什麼要學、學什麼?》中第7部分提到的“計算思維”中的“分解”:將一個複雜問題拆分成幾個更小、更容易處理的問題。(計算思維4要素是:分解、模式識別、抽象、算法開發)

現在我們再根據這個思路繼續進行設計。

軟件設計:

  1. 第一個角色“半徑”,動畫過程中圍繞圓點勻速旋轉。畫圓的動畫放在舞臺左側;
  2. 第二個角色“端點”,即,圓周上的點,隨著半徑的移動在圓周上移動;
  3. 第三個角色“正弦波上的點”,我們就簡稱它“正弦波”吧,它在每一次動畫中在x座標上都移動2π,而y座標和“端點”的y座標一致。畫正弦波的動畫放在舞臺右側;
  4. 第二和第三個角色在每一次動畫中勻速移動n次,我們將這個次數定義成變量,取名“採樣次數”,預設值100。

01 更換舞臺背景

因為我們要做的是數學原理動畫,並且涉及到座標系,所以我們將舞臺背景改成如下圖片。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

02 添加角色

按照上面的分析,添加半徑、端點和正弦波,這三個角色都需要我們手工繪製。

1、如圖點擊添加角色圖標,選中【繪製】,添加三個角色,並分別改名為:半徑、端點、正弦波。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

2、刪除不需要的默認“角色1”小黃貓。

03 繪製角色

繪製“半徑”

找到角色中心點,把它當做圓心,從它開始往正右側畫直線。直線長度應該適中,因為要確保使用它畫的圓不要超過舞臺左側區域,同時,又要確保畫的圓也不能太小,免得不容易查看。建議先畫長一點,當編碼調試發現超長的時候,用橡皮擦一點點擦除進行調整。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

繪製“端點”

找到角色中心點,點一個黑點,也可以是畫一個極小的實心圓。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

繪製“正弦波”

操作步驟同繪製“端點”,顏色可以相同,也可以不同。

04 創建變量

畫圓和正弦波的動畫看似是連續、平滑的動畫,但是,其實仍然是一步一步的小動畫組成的,只是這些小動畫被分割的越小,停頓時間極短,所以給人的視覺感覺是連貫的。(我們以前的文章已經介紹過動畫成像的原理《【Scratch工具介紹】擴展知識:畫面是怎麼“動”起來的?》,這裡不再贅述)

既然“動畫是一段一段的”,我們可以定義2個變量來表述這個含義:一個控制一次動畫的時長,一個控制被分成多少段。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

注意,這兩個變量是幾個角色公用的,所以創建時請選擇“適用於所有角色”。

也許還需要其他的變量,等到編程遇到的時候再說吧。

05 左側圓周的編碼

將“半徑”的圓點放在靠近左側中心的位置,即儘量圓點放在座標(-120, 0)處。

“半徑”圍繞圓點旋轉,每次旋轉角度(360/取樣次數),重複旋轉(取樣次數)次,二者相乘得到圓周360度,即,“半徑”的外側點運動軌跡就是一個圓。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

代碼不多,咱們重點看兩個地方:

1、發送【廣播】,它的作用是通知角色“端點”移動,實現了“端點”和“半徑”移動同步。關於【廣播】可以查閱《Scratch編程 | 事件積木》。下面是創建廣播的過程,

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

2、每次移動之間等待一段時間,否則程序運行太快根本無法看到動畫過程。等待時間是(動畫時長/採樣次數)。

06 圓周端點的編碼

想實時得到“半徑”的外側點座標不是易事,所以,我才想著增加一個“端點”角色,讓“端點”跟隨“半徑”運動,以便於我們得到圓周上點的座標。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

講解一下部分代碼:

1、移動(80)步,這裡的(80)是“半徑”的長度,是從座標系中讀出來的,每個人畫的不同,所以,這個值應該也是不同的。

2、“端點”是怎麼做圓周運動的呢?

代碼是【當接收到旋轉】之後的3個藍色積木。文字解釋乏力,看圖吧

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

3、發送【廣播】,它的作用是通知角色“正弦波”移動,實現了“正弦波”和“端點”移動同步。

07 給右側正弦波編碼

我們先約定正弦波的一個週期,在x軸方向上長度200,即,10秒鐘(變量“動畫時長”)內在x軸移動100次(變量“取樣次數”)累計長度200,這樣x軸上的邏輯就出來了。

再看在y軸方向上,角色“正弦波”的y座標和“端點”角色的y座標始終一致。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

試運行程序,點擊舞臺左上角的小旗子。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

圓周運動和正弦波移動都能清晰的演示了,如果能夠留下它們的軌跡就更好了。

08 留下運動軌跡

現在,我們暫停講解,請各位讀者嘗試思考這個問題:

如何在“端點”和“正弦波”運動的時候,留下它們的移動痕跡??

思考倒計時……

10

9

8

7

6

5

4

3

2

1

0

答案是,使用“圖章”積木。

編碼如下:

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

關於“圖章”積木的更多內容,可以查閱歷史文章《【Scratch工具介紹】畫筆積木》。

09 完工!運行程序

至此,我們完成了“需求說明”中的全部內容。

點擊舞臺左上角的小旗子運行程序,看看效果吧。

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫

PS:直到完成本文才感覺到這個例子可能有些偏難了,如果你沒有看懂……多看幾遍吧~~

附加練習

  • 思考:為什麼繪製“半徑”時,要從角色中心點的那個十字星開始畫直線?

tag:#Scratch編程、#少兒編程、#兒童編程、#趣味編程、#青少年編程、#軟件編程

少兒編程|Scratch實例14:“圓周運動投影正弦曲線”的數學動畫


分享到:


相關文章: