跳轉到

📚 力與運動遊樂場

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

原理與蘋果樹

(資料來源: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)


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

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

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

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


無重力狀態


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

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

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

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

上下向量

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


範例程式 無重力狀態 - - - - - - - (重力控制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秒, 資料來源:10)


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

範例程式 重力搬運 - - - - - - - (重力控制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秒, 資料來源:11)

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



固定球數


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

彈性排列想法

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


範例程式 固定球數 - - - - - - - (彈性排列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. Pizza Night on the Space Station!, By NASA, youtube連結 ↩

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

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