程式設計

之前的課程,我們已學會如何繪製物體的等速度運動
這節課我們將進階介紹如何利用VPython繪製等加速度運動

一、自由落體運動


Step1、我們先使用之前等速度的程式碼開始,並從中做修改。

(1)新增一變數ball_height作為球的初始高度。
(2)新增場景scene,並始其高度(y方向)的中間點訂為ball_height/2。
(3)新增一地板floor,並使其高度(y方向)在0的位置

GlowScript 3.2 VPython
#關於球
size=0.5
#球的高度
ball_height=20

#關於場景(背景)
scene=canvas(width=800, height=800,center=vector(0,ball_height/2,0), background=color.white)

ball=sphere(pos=vector(0,ball_height ,0),radius=size ,color=color.magenta ,v=vector(1,0,0))

#關於地板
floor=box(pos=vector(0,0,0),length=20,width=20,height=1 ,color=color.blue)

#關於時間
t=0
dt=0.01

#關於運動情形
while (t<=10):
 rate(100)
 ball.pos=ball.pos+ball.v*dt
 t=t+dt
 print(t,ball.pos)


Step2、增加重力加速度g
自由落體的初速為0 m/s,且其在鉛直方向有重力加速度,因此我們需將程式中,球的初速度改為靜止,並增加重力加速度g的值(向下10 m/s2)。
重力加速度的方向為鉛直向下,因此我們在程式中新增一變數g作為重力加速度,並使其為(0,-10,0)

由物理所學可知,等加速度運動的v=v+aΔt
因此while()中,我們增加v=v+a*dt,使球的速度隨著加速度而增加

程式修改如下:

GlowScript 3.2 VPython
#關於球
size=0.5
#球的高度
ball_height=20

#重力加速度
g=vector(0,-10,0)

#關於場景(背景)
scene=canvas(width=800, height=600,center=vector(0,ball_height/2,0), background=color.white)

ball=sphere(pos=vector(0,ball_height ,0),radius=size ,color=color.magenta ,v=vector(0,0,0))

#關於地板
floor=box(pos=vector(0,0,0),length=20,width=20,height=1 ,color=color.blue)

#關於時間
t=0
dt=0.01

#關於運動情形
while (t<=10):
 rate(100)
 ball.pos=ball.pos+ball.v*dt
ball.v=ball.v+g*dt
 t=t+dt
 print(t,ball.pos)


課程任務7: 調整不同的ball_height,並觀看模擬的動畫,試著從物理所學自由落體計簡落體時間是否和動畫的一致。



課程任務8:為自由落體的球增加速度的向量

二、if()條件判斷


在現實生活中,我們時常會視條件進行判斷下一步要怎麼做,在程式語言中,也能有一樣的功能,就是使用if()函式,其運作情形如下圖所示:


程式練習

1、判斷成績是否及格(1)

score=int(input("輸入成績"))
if(score>=60):
 print("及格")

2、判斷成績是否及格(2)

score=int(input("輸入成績"))
if(score>=60):
 print("及格")
else:
 print("不及格")

2、判斷成績的等第

score=int(input("輸入成績"))
if(score>=80):
 print("成績甲")
else if(score>=60&score<80):
 print("成績乙")
else:
 print("成績丙")


三、彈跳的球


在上面的程式中,我們有畫上一個地板,現實生活中球碰到地板應該要反彈,因此我們 可以利用上面學到的if()函數和上方自由落體的程式碼進行修改,來達到此效果。

Step1、我們要讓球在地板的位置反彈,因此增加if(),並判斷球的位置是否小於等於地板。
Step2、滿足上述條件,讓球的速度v=-v,使其向上反彈。
Step3、將while的條件由(t<=10),更改為(True),使其能一直運動下去。

程式修改如下:

GlowScript 3.2 VPython
#關於球
size=0.5
#球的高度
ball_height=20

#重力加速度
g=vector(0,-10,0)

#關於場景(背景)
scene=canvas(width=800, height=600,center=vector(0,ball_height/2,0), background=color.white)

ball=sphere(pos=vector(0,ball_height ,0),radius=size ,color=color.magenta ,v=vector(0,0,0))

#球速的向量
v_arrow=arrow(color=color.red, shaftwidth=0.1)

#關於地板
floor=box(pos=vector(0,0,0),length=20,width=20,height=1 ,color=color.blue)

#關於時間
t=0
dt=0.01

#關於運動情形
while (True):
 rate(100)
 ball.pos=ball.pos+ball.v*dt
 ball.v=ball.v+g*dt
v_arrow.pos=ball.pos
v_arrow.axis=ball.v
if(ball.pos.y<=0):
  ball.v=-ball.v
 t=t+dt
 print(t,ball.pos)


課程任務9:將球的初速度v更改為v=(2,0,0),觀看球的運動情形。


加分選項(1):調整適當的地板大小和while()的條件,使球運動至地板邊界後停止運動。

加分選項(2):增加球的運動軌跡。
sphere()內,增加make_trail=True,trail_type="points",interval=10,顯示球的運動軌跡。
程式修改如下:

ball=sphere(pos=vector(0,ball_height ,0), make_trail=True,trail_type="points",interval=10, radius=size ,color=color.magenta ,v=vector(2,0,0))