在本文中,我們將完成一個“正弦曲線與圓周運動關係原理”的數學原理演示動畫。
正弦曲線或正弦波(Sinusoid/Sine wave)是一種來自數學三角函數中的正弦比例的曲線。
正弦曲線的形狀就像完美的海上波浪般,以三角函數正弦比例改變而形成。
標準的純正弦函數公式為:
y=sin(x)
而一般應用的正弦曲線公式為:
y=Asin(ωt+θ)
其中,sin為正弦符號,A為波幅(縱軸),ω為角頻率,t為時間(橫軸),θ為相偏移(橫軸左右)。
—— wikipedia
好了,初中數學知識複習就到這裡。
下面我們開始這次的編程內容吧。數學書在講解正弦曲線的含義時提到,“正弦波是一個圓周運動在直線上的投影”,這個定義並不容易理解,不如我們編寫一個程序,動態的演示這個過程,幫助初中生們理解吧~
00 軟件分析
需求說明:
編寫一個動畫程序,有一個點在勻速的圍繞圓運動,有另外一個點在x軸上勻速運動、同時在y軸上與前一個點的高度一致。最好留下這兩個點的運動軌跡。
由以上內容描述,我們可以將需求人為拆分成兩部分,第一步,畫一個圓;第二步,畫正弦波。這就用到了《Scratch視頻課程1|什麼是少兒編程、為什麼要學、學什麼?》中第7部分提到的“計算思維”中的“分解”:將一個複雜問題拆分成幾個更小、更容易處理的問題。(計算思維4要素是:分解、模式識別、抽象、算法開發)
現在我們再根據這個思路繼續進行設計。
軟件設計:
- 第一個角色“半徑”,動畫過程中圍繞圓點勻速旋轉。畫圓的動畫放在舞臺左側;
- 第二個角色“端點”,即,圓周上的點,隨著半徑的移動在圓周上移動;
- 第三個角色“正弦波上的點”,我們就簡稱它“正弦波”吧,它在每一次動畫中在x座標上都移動2π,而y座標和“端點”的y座標一致。畫正弦波的動畫放在舞臺右側;
- 第二和第三個角色在每一次動畫中勻速移動n次,我們將這個次數定義成變量,取名“採樣次數”,預設值100。
01 更換舞臺背景
因為我們要做的是數學原理動畫,並且涉及到座標系,所以我們將舞臺背景改成如下圖片。
02 添加角色
按照上面的分析,添加半徑、端點和正弦波,這三個角色都需要我們手工繪製。
1、如圖點擊添加角色圖標,選中【繪製】,添加三個角色,並分別改名為:半徑、端點、正弦波。
2、刪除不需要的默認“角色1”小黃貓。
03 繪製角色
繪製“半徑”
找到角色中心點,把它當做圓心,從它開始往正右側畫直線。直線長度應該適中,因為要確保使用它畫的圓不要超過舞臺左側區域,同時,又要確保畫的圓也不能太小,免得不容易查看。建議先畫長一點,當編碼調試發現超長的時候,用橡皮擦一點點擦除進行調整。
繪製“端點”
找到角色中心點,點一個黑點,也可以是畫一個極小的實心圓。
繪製“正弦波”
操作步驟同繪製“端點”,顏色可以相同,也可以不同。
04 創建變量
畫圓和正弦波的動畫看似是連續、平滑的動畫,但是,其實仍然是一步一步的小動畫組成的,只是這些小動畫被分割的越小,停頓時間極短,所以給人的視覺感覺是連貫的。(我們以前的文章已經介紹過動畫成像的原理《【Scratch工具介紹】擴展知識:畫面是怎麼“動”起來的?》,這裡不再贅述)
既然“動畫是一段一段的”,我們可以定義2個變量來表述這個含義:一個控制一次動畫的時長,一個控制被分成多少段。
注意,這兩個變量是幾個角色公用的,所以創建時請選擇“適用於所有角色”。
也許還需要其他的變量,等到編程遇到的時候再說吧。
05 左側圓周的編碼
將“半徑”的圓點放在靠近左側中心的位置,即儘量圓點放在座標(-120, 0)處。
“半徑”圍繞圓點旋轉,每次旋轉角度(360/取樣次數),重複旋轉(取樣次數)次,二者相乘得到圓周360度,即,“半徑”的外側點運動軌跡就是一個圓。
代碼不多,咱們重點看兩個地方:
1、發送【廣播】,它的作用是通知角色“端點”移動,實現了“端點”和“半徑”移動同步。關於【廣播】可以查閱《Scratch編程 | 事件積木》。下面是創建廣播的過程,
2、每次移動之間等待一段時間,否則程序運行太快根本無法看到動畫過程。等待時間是(動畫時長/採樣次數)。
06 圓周端點的編碼
想實時得到“半徑”的外側點座標不是易事,所以,我才想著增加一個“端點”角色,讓“端點”跟隨“半徑”運動,以便於我們得到圓周上點的座標。
講解一下部分代碼:
1、移動(80)步,這裡的(80)是“半徑”的長度,是從座標系中讀出來的,每個人畫的不同,所以,這個值應該也是不同的。
2、“端點”是怎麼做圓周運動的呢?
代碼是【當接收到旋轉】之後的3個藍色積木。文字解釋乏力,看圖吧
3、發送【廣播】,它的作用是通知角色“正弦波”移動,實現了“正弦波”和“端點”移動同步。
07 給右側正弦波編碼
我們先約定正弦波的一個週期,在x軸方向上長度200,即,10秒鐘(變量“動畫時長”)內在x軸移動100次(變量“取樣次數”)累計長度200,這樣x軸上的邏輯就出來了。
再看在y軸方向上,角色“正弦波”的y座標和“端點”角色的y座標始終一致。
試運行程序,點擊舞臺左上角的小旗子。
圓周運動和正弦波移動都能清晰的演示了,如果能夠留下它們的軌跡就更好了。
08 留下運動軌跡
現在,我們暫停講解,請各位讀者嘗試思考這個問題:
如何在“端點”和“正弦波”運動的時候,留下它們的移動痕跡??
思考倒計時……
10
9
8
7
6
5
4
3
2
1
0
答案是,使用“圖章”積木。
編碼如下:
關於“圖章”積木的更多內容,可以查閱歷史文章《【Scratch工具介紹】畫筆積木》。
09 完工!運行程序
至此,我們完成了“需求說明”中的全部內容。
點擊舞臺左上角的小旗子運行程序,看看效果吧。
PS:直到完成本文才感覺到這個例子可能有些偏難了,如果你沒有看懂……多看幾遍吧~~
附加練習
- 思考:為什麼繪製“半徑”時,要從角色中心點的那個十字星開始畫直線?
tag:#Scratch編程、#少兒編程、#兒童編程、#趣味編程、#青少年編程、#軟件編程
閱讀更多 青少兒編程KidProgram 的文章