📚 力與運動遊樂場
- 艾薩克·牛頓爵士是一位英格蘭的物理學家、數學家與天文學家,對數學、自然科學、工業技術等有許多重要的貢獻。牛頓力學是研究物體運動的學問,對於拋體到天文學上的星球運動等,提供了相當準確的結果。在中小學自然領域中的力與運動課程,就是在學習基礎的牛頓力學。
-
(資料來源: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]
模擬主迴圈()
摩擦力
- 什麼是摩擦力?如果摩擦力消失一分鐘會如何?
-
(1分24秒, 資料來源:5)
摩擦力作用於物體的相反方向,並與相互摩擦的物體有關。
- 摩擦係數由滑動面的性質、粗糙度等因素決定。滑動面越粗糙,摩擦係數越大。
-
-
(資料來源:6)
設定物體的不同摩擦係數,寫出程式並觀察模擬的結果。
範例程式 摩擦力 - - - - - - - (力與斜面3/4 接續)
【長度2:43 章節時間如下】
- 5:40 摩擦力
# 斜面建立方法請參考操作影片
from 物理模組 import *
舞台 = 物理引擎(1200,800)
def 按下滑鼠時(x, y):
物體 = 新增方塊(寬=50,高=50)
物體.位置 = [x, y]
物體.摩擦 = 0.2
模擬主迴圈()
註:地形需自行建立(操作如階段1影片)
施加力量
-
(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影片)
📗 重力控制(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)
模擬主迴圈()
重力搬運
- 除了上下的向量,也可以使用左右的向量
-
如果可以控制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影片)
結構化程式設計
📙 彈性排列(3)
- 什麼是繩波?
-
(31秒, 資料來源:11)
讓我們用多顆球的排列並彈跳,來做出類似繩波的效果。
固定球數
- 如何一次產生多顆球並產生有變化的彈跳呢?
利用之前的恢復係數,讓我們來實作程式吧!
範例程式 固定球數 - - - - - - - (彈性排列1/3 新檔)
【長度4:00 章節時間如下】
- 0:00 存檔、匯入模組
- 1:04 固定球數
from 物理模組 import *
舞台 = 物理引擎(800,800)
for 數 in range(10) :
物體 = 新增圓球(40)
物體.位置 = [數 * 80, 400]
物體.彈性 = 數 / 10
模擬主迴圈()
結構化程式設計
變數模式識別
如果要從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: 量子現象【觀念】波粒二象性-物質波(高一物理)
⭐ 進階專題
太棒了,經過了前面的課程,相信你已經學會基本的物理模擬程式,並能改變物體的物理性質來做出不同的變化。
- 如果想要更進一步,可以挑戰下面的程式專題哦!