回上方

第6堂課

速度視覺化

在自由落體的案例中,加上顯示速度值的箭頭,可以讓我們更清楚地了解重力加速度對球造成的變化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# -*- coding: utf8 -*-
# 匯入視覺化套件
from vpython import *

# 1. 參數設定
#加速度
a = vector(0, -9.8, 0)    #加速度值,在 x、z 方向為 0,在 y 方向為 g=-9.8 公尺/秒^2
#速度
v = vector(0, 0, 0)    #速度值,在 x、y、z 方向為 0
#高度
h = 10.0    #球的初始高度,單位為公尺
#時間間隔
dt = 0.001  #畫面更新的時間間隔,單位為秒
#經過時間
t = 0       #模擬所經過的時間 ,單位為秒,初始值為0

# 2. 畫面設定
#畫布
scene = canvas(center=vector(0, h/2, 0), background=vector(0.5,0.6, 0))
#參考地板
floor = box(pos=vector(0,0,0), length=15, height=0.005, width=5)
#球
ball = sphere(pos=vector(0, h, 0), radius=0.2, color=color.blue)
#速度箭頭
v_arrow = arrow(pos=ball.pos, axis=v, shaftwidth=0.1)

# 3. 描述物體的運動
while ball.pos.y > 0.2:
    rate(1000)
    # 速度 = 速度 + 加速度 * 時間間隔
    v = v + a * dt
    # 位置 = 位置 + 速度 * 時間間隔
    ball.pos= ball.pos+ v* dt
    # 更新速度箭頭資料
    v_arrow.pos = ball.pos
    v_arrow.axis = v/5

執行結果

_images/B0801.png

作業

修改三維運動拋物線的案例,加適當的程式碼,使得在任何時刻,球上都有一個箭頭(arrow),並且此箭頭的長度正比於球的速度,且方向平行於球的速度方向,如下圖。

_images/B0802.png

提示:三維運動拋物線程式如下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# -*- coding: utf8 -*-
# 匯入視覺化套件
from vpython import *

# 1. 參數設定
#球的半徑
size = 0.2  #球的半徑,單位為公尺
#加速度
g = vector(0,-9.8,0)    #加速度值,在 x、z 方向為 0,在 y 方向為重力加速度 -9.8 公尺/秒^2
#時間間隔
dt = 0.001  #畫面更新的時間間隔,單位為秒
#經過時間
t = 0       #模擬所經過的時間 ,單位為秒,初始值為0

# 2. 畫面設定
#畫布
scene = canvas(center=vector(15, 5, 0), background=vector(0.5,0.6, 0.5))
#參考地板
floor = box(pos=vector(15,-0.05,0), length=30, height=0.1, width=5)
#球
ball = sphere(pos=vector(0, 0, 0), radius=size, color=color.blue, make_trail= True)

# 3.初始條件
ball.v = vector(5, 10, 0)

# 4. 描述物體的運動

while t < 5:
    rate(1000)
    # 速度 = 速度 + 加速度 * 時間間隔
    ball.v = ball.v + g * dt
    # 位置 = 位置 + 速度 * 時間間隔
    ball.pos = ball.pos + ball.v * dt

    # 判斷球是否碰到地面
    if ball.pos.y <= size:
        ball.v.y = abs(ball.v.y)

    #計算時間
    t = t + dt

執行結果

_images/B0601.png

本單元課程自2018.7.5日起已被瀏覽 268