跳轉到

📚 力與運動遊樂場

艾薩克·牛頓爵士是一位英格蘭的物理學家、數學家與天文學家,對數學、自然科學、工業技術等有許多重要的貢獻。牛頓力學是研究物體運動的學問,對於拋體到天文學上的星球運動等,提供了相當準確的結果。在中小學自然領域中的力與運動課程,就是在學習基礎的牛頓力學。

原理與蘋果樹

(資料來源:1)

電腦除了計算以外,也可以模擬科學實驗,幫助學習者理解概念。 一起來進行各種有趣的 力與運動程式模擬 吧!

關於物理程式
Py4t物理程式的底層函式庫、範例程式與原始碼。
物理學習模組 說明





📕 球的彈性(3)


很多同學下課時喜歡打球,球是會有產生各種不同的彈跳,讓球類的活動變得非常有趣。

圓球

(資料來源:2)





新增圓球


利用物理程式來產生物理舞台,在舞台中,只要產生物體並設置好各種物理量,就能產生力與運動的模擬。

圓球


利用事件處理函式,設置球的位置,可以增加物理程式的互動性。

滑鼠操作事件
在某些程式中,會進一步將滑鼠操作細分多個動作,並觸發對應的事件
滑鼠操作事件


首先,設計一個按下滑鼠後可以新增圓球的程式吧!


範例程式 新增圓球 - - - - - - - (球的彈性1/3 新檔)

【長度2:07 章節時間如下】

  • 0:00 存檔、匯入模組
  • 0:24 新增圓球
from 物理模組 import *

def 按下滑鼠時(x, y):
    物體 = 新增圓球()
    物體.位置 = [x, y] 

模擬主迴圈()
模擬主迴圈?流程?
什麼是「模擬主迴圈」?它的程式結構與演算流程是什麼?
事件驅動程式 結構與流程

補充資料
維基百科: 事件驅動程式設計





恢復係數


想一想,球的彈性是什麼?彈性可以測量嗎?

如何知道一顆球的彈性好不好呢?

(2分00秒, 資料來源:3)



恢復係數可以衡量兩個物體在碰撞後的反彈程度。影片中測量籃球恢復係數的說明如下:

恢復係數

(資料來源:3)



藉由恢復係數的設置,用程式來模擬不同彈性的球吧!


範例程式 恢復係數 - - - - - - - (球的彈性2/3 接續)

【長度2:00 章節時間如下】

  • 2:11 恢復係數
from 物理模組 import *

def 按下滑鼠時(x, y):
    物體 = 新增圓球()
    物體.位置 = [x, y]
    物體.彈性 = 0.75 

模擬主迴圈()
補充資料
了解更多 恢復係數
恢復係數與球類比賽有什麼關係? 中華職棒比賽用球爭議





超強彈性體


將兩顆很有彈性的球互相碰撞,會發生什麼事?

(3分07秒, 資料來源:3)



太奇妙了!將兩顆很有彈性的球在一起,下方的球較大,上方的球較小,竟然就變成可以超越原本高度的彈性體。

超強彈性體

(資料來源:3)

可以用程式來模擬這個現象嗎?試著動手寫寫看。


範例程式 超強彈性體 - - - - - - - (球的彈性3/3 接續)

【長度2:37 章節時間如下】

  • 4:14 超強彈性體
from 物理模組 import *

def 按下滑鼠時(x, y):
    物體 = 新增圓球(5)
    物體.位置 = [x, y + 60]
    物體.彈性 = 1

    物體 = 新增圓球(20)
    物體.位置 = [x, y]
    物體.彈性 = 1    

模擬主迴圈()
更多練習
影片中有3顆球的實驗,請你試著改寫程式,讓大、中、小球組成超強彈性體吧。
彈性碰撞
超強彈性體的原理是什麼?請參考 維基百科: 彈性碰撞





📒 力與斜面(4)


公園遊戲區裡常會出現的溜滑梯,當溜滑梯的傾斜度不同時,溜起來的感覺也不同。

溜滑梯

(資料來源:4)



新增球與斜面


用斜面來模擬溜滑梯,在程式中要如何做出不同的傾斜度呢?

不同斜面


Py4t內建了物理舞台地形的輔助功能,能更容易地做出各種物理模擬,輔助操作如下圖:

地形輔助


動手做做看,利用輔助功能,建立出不同的斜面。


範例程式 新增球與斜面 - - - - - - - (力與斜面1/4 新檔)

【長度5:00 章節時間如下】

  • 0:00 存檔、匯入模組
  • 0:49 新增球與斜面
# 斜面建立方法請參考操作影片

from 物理模組 import *
舞台 = 物理引擎(1200,800)

def 按下滑鼠時(x, y):
    物體 = 新增圓球(半徑=25)
    物體.位置 = [x, y]

模擬主迴圈()





落下速度比較


當球在不同的斜面落下時,哪個快?哪個慢?

球在不同斜面


利用物理程式輔助功能,來模擬球從斜面落下的結果。


範例程式 速度比較 - - - - - - - (力與斜面2/4 接續)

【長度0:36 章節時間如下】

  • 5:03 速度比較
# 斜面建立方法請參考操作影片

from 物理模組 import *
舞台 = 物理引擎(1200,800)

def 按下滑鼠時(x, y):
    物體 = 新增圓球(半徑=25)
    物體.位置 = [x, y]

模擬主迴圈()
補充資料
youtube: 吉娃斯科學小教室 : 斜面運動、重力、支撐力





摩擦力


什麼是摩擦力?如果摩擦力消失一分鐘會如何?

(1分24秒, 資料來源:5)


摩擦力作用於物體的相反方向,並與相互摩擦的物體有關。

摩擦係數由滑動面的性質、粗糙度等因素決定。滑動面越粗糙,摩擦係數越大。

摩擦力

(資料來源:6)

設定物體的不同摩擦係數,寫出程式並觀察模擬的結果。


範例程式 摩擦力 - - - - - - - (力與斜面3/4 接續)

【長度2:43 章節時間如下】

  • 5:40 摩擦力
# 斜面建立方法請參考操作影片

from 物理模組 import *
舞台 = 物理引擎(1200,800)

def 按下滑鼠時(x, y):
    物體 = 新增方塊(=50,=50)
    物體.位置 = [x, y]
    物體.摩擦 = 0.2

模擬主迴圈()

註:地形需自行建立(操作如階段1影片)

補充資料
youtube: myViewBoard 原創內容:摩擦力
youtube: 均一教育平台【八下理化】【觀念】摩擦力





施加力量


(1分03秒, 資料來源:7)

在滑板上以一定的速度衝上斜坡時,會發生什麼事?

設置物體的衝力後,以程式模擬衝上斜坡的現象。


範例程式 施力 - - - - - - - (力與斜面4/4 接續)

【長度2:08 章節時間如下】

  • 8:26 施力
# 斜面建立方法請參考操作影片

from 物理模組 import *
舞台 = 物理引擎(1200,800)

def 按下滑鼠時(x, y):
    物體 = 新增方塊(=50,=50)
    物體.位置 = [x, y]
    物體.摩擦 = 0.2

    向量 = [800, 0]
    物體.施加衝力(向量)

模擬主迴圈()

註:地形需自行建立(操作如階段1影片)

補充資料
youtube: 國中理化教學資料庫 伽利略斜面實驗





📗 噴射拋體(2)


推鉛球,是一個常見的運動會比賽項目。

(1分58秒, 資料來源:8)

鉛球丟出後,就是一個在空中的拋物體。





拋體運動


鉛球被推出時,在空中的軌跡是什麼樣的線條?

(1分05秒, 資料來源:9)



如果想用程式來模擬拋體,要先決定發射位置與速度。

將圓球發射位置定在視窗左下角,用滑鼠的座標位置當作速度的大小,操作起來較為直覺,如下圖:

滑鼠速度向量



一起來動手寫寫看。


範例程式 拋體運動 - - - - - - - (噴射拋體1/2 新檔)

【長度3:10 章節時間如下】

  • 0:00 存檔、匯入模組
  • 0:31 拋體運動
from 物理模組 import *
舞台 = 物理引擎(800,800)

def 按下滑鼠時(x, y):
    物體 = 新增圓球(半徑=20)
    物體.位置 = [0, 0]
    物體.速度 = [x, y]

模擬主迴圈()
補充資料
維基百科: 拋體
學呀: 拋物線運動





連續噴射


完成了基本的拋體運動程式,接下來可以做出什麼變化呢?

(9秒, 資料來源:10)



讓我們把多顆小圓球當成拋體,做出噴水的簡單模擬。

這次將發射位置定在視窗中間底部,當發射位置改變時,要如何用滑鼠來呈現速度?為了達到直覺的操作,需做以下的修正:


滑鼠速度向量2



一起來動手寫寫看。


範例程式 連續噴射 - - - - - - - (噴射拋體2/2 接續)

【長度3:10 章節時間如下】

  • 3:13 連續噴射
from 物理模組 import *
舞台 = 物理引擎(800,800)

def 拖曳滑鼠時(x, y, dx, dy):
    物體 = 新增圓球(半徑=5)
    物體.位置 = [400, 0]
    物體.速度 = [(x - 400) * 2, y * 2]

模擬主迴圈()





📗 重力控制(2)


重力是什麼?如果失去了重力會如何?

(2分38秒, 資料來源:11)

除非到外太空,不然在地球上很難進行重力的實驗。

經由物理程式的模擬,可以做出無重力,甚至是重力反轉的效果。


無重力狀態


你知道如何在太空中做披薩嗎?

(1分00秒, 資料來源:12)

在太空中的物體若沒有固定好,物體受到一點力量,就會照著慣性的作用,產生漂浮的現象。

在物理模擬程式中,以重力加速度的平面向量來表示重力,向量代表著重力的方向及大小。

上下向量

知道了這些,就可以來寫無重力的模擬程式。


範例程式 無重力狀態 - - - - - - - (重力控制1/2 新檔)

【長度5:43 章節時間如下】

  • 0:00 存檔、匯入模組
  • 0:31 無重力狀態
from 物理模組 import *
import random as 隨機

舞台 = 物理引擎(800,800)
舞台.重力 = [0, 0]

def 按下滑鼠時(x, y):
    物體 = 新增方塊()
    物體.位置 = [x, y]
    物體.角速度 = 隨機.randint(-360,360)

模擬主迴圈()
慣性與向量
維基百科: 慣性
youtube: 平面運動 【觀念】向量(1)向量的表示方法





重力搬運


除了上下的向量,也可以使用左右的向量

左右向量


如果可以控制4個方向的向量,可以做什麼呢?

來看看在國際太空站的太空人如何進行趣味奧運比賽。

(1分14秒, 資料來源:13)


請發揮你的創意,用控制重力的程式做出搬運物體的遊戲。

範例程式 重力搬運 - - - - - - - (重力控制2/2 接續)

【長度5:20 章節時間如下】

  • 5:47 重力搬運
from 物理模組 import *
import random as 隨機

舞台 = 物理引擎(800,800)
舞台.重力 = [0, 0]

def 按下滑鼠時(x, y):
    物體 = 新增方塊()
    物體.位置 = [x, y]
    物體.角速度 = 隨機.randint(-360,360)

def 放開鍵盤時(按鍵, x, y):
    舞台.重力 = [0, 0]

def 按下鍵盤時(按鍵, x, y):
    if 按鍵 == key.UP :
        舞台.重力 = [0, 800]
    if 按鍵 == key.DOWN :
        舞台.重力 = [0, -800]
    if 按鍵 == key.RIGHT :
        舞台.重力 = [800, 0]
    if 按鍵 == key.LEFT :
        舞台.重力 = [-800, 0]

模擬主迴圈()

註:搬運地形需自行建立(操作如階段2影片)

結構化程式設計
選擇結構
重力
youtube: 高一物理【觀念】重力
維基百科: 重力





📙 彈性排列(3)


什麼是繩波?

(31秒, 資料來源:14)

讓我們用多顆球的排列並彈跳,來做出類似繩波的效果。



固定球數


如何一次產生多顆球並產生有變化的彈跳呢?

彈性排列想法

利用之前的恢復係數,讓我們來實作程式吧!


範例程式 固定球數 - - - - - - - (彈性排列1/3 新檔)

【長度4:00 章節時間如下】

  • 0:00 存檔、匯入模組
  • 1:04 固定球數
from 物理模組 import *
舞台 = 物理引擎(800,800)

for  in range(10) :
    物體 = 新增圓球(40)
    物體.位置 = [ * 80, 400]
    物體.彈性 =  / 10

模擬主迴圈()
結構化程式設計
計次式重複 (for 迴圈)
迴圈變數與圈數





變數模式識別


如果要從10顆球,可以隨意調整成20或40或80顆,程式要如何寫呢?

識別變數的模式,找出各個變數之間的關係!

變數模式識別

運算思維

樣式辨識


想清楚了嗎?動手寫寫看。


範例程式 變數模式識別 - - - - - - - (彈性排列2/3 接續)

【長度2:43 章節時間如下】

  • 4:03 變數模式識別
from 物理模組 import *
舞台 = 物理引擎(800,800)
球數 = 20
直徑 = 800 // 球數
半徑 = 直徑 // 2

for  in range(球數) :
    物體 = 新增圓球(半徑)
    物體.位置 = [ * 直徑, 400]
    物體.彈性 =  / 球數

模擬主迴圈()





不同波動變化


利用不同的彈性排列變化,來做出有規律的彈跳效果。

彈性排列


一起來寫寫看。

範例程式 不同波動變化 - - - - - - - (彈性排列3/3 接續)

【長度4:12 章節時間如下】

  • 6:48 不同波動變化
from 物理模組 import *
舞台 = 物理引擎(800,800)
球數 = 80
直徑 = 800 // 球數
半徑 = 直徑 // 2

for  in range(球數) :
    物體 = 新增圓球(半徑)
    物體.位置 = [ * 直徑, 400]
    if  % 2 == 0 :
        物體.彈性 = 0.8 + (球數 - ) / 球數 * 0.2
    else :
        物體.彈性 = 0.8 +  / 球數 * 0.2

模擬主迴圈()
結構化程式設計
雙向選擇結構
多顆圓球不斷彈跳的樣子,會聯想到什麼?
youtube: 繩波的反射示範實驗
youtube: 量子現象【觀念】波粒二象性-物質波(高一物理)





⭐ 進階專題


太棒了,經過了前面的課程,相信你已經學會基本的物理模擬程式,並能改變物體的物理性質來做出不同的變化。

如果想要更進一步,可以挑戰下面的程式專題哦!

物理撞擊實驗室





  1. 艾薩克·牛頓 , 維基百科連結 

  2. 新建中籃球場, By Yu tptw, 維基百科連結 

  3. 【Fun科學】超彈力橡皮筋球, By 佑來了, youtube連結 

  4. 位於葫蘆埤自然公園中的溜滑梯, By 月亮灣, 維基百科連結 

  5. 如果摩擦力消失一分鐘?, By 大膽科學, youtube連結 

  6. 摩擦力受各性質的影響, 引用自中學生網站, pdf連結 

  7. 8歲女孩成功挑戰5公尺極限滑板, By 即新聞, youtube連結 

  8. 超越人類極限【金牌鉛球國手】巨人手掌宛如人體砲臺發射器, By 健人蓋伊, youtube連結 

  9. 吉娃斯科學小教室|#37 : 拋體運動|動能、重力、運動半徑|兒童科普動畫, By EngineTV 原金動畫, youtube連結 

  10. 太陽能系統-自動灑水器-噴水頭, By CHIJIJOHNNY, youtube連結 

  11. 如果我們失去引力五秒? , By 大膽科學, youtube連結 

  12. Pizza Night on the Space Station!, By NASA, youtube連結 

  13. Highlights from the first-ever space Olympics!, By NASA, youtube連結 

  14. 繩波示波器, By 國中理化教學資料庫, youtube連結