第13堂課
一維空間的彈性碰撞
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 41 | # -*- coding: utf8 -*-
# 匯入視覺化套件
from vpython import *
# 1. 畫面設定
scene = canvas(width=600, height=400, background=vector(0.5,0.6,0.5))
arrow1 = arrow(pos=vector(-1,0,0), axis=vector(2,0,0), shaftwidth=0.005)
arrow2 = arrow(pos=vector(0,0,0), axis=vector(0,0.3,0), shaftwidth=0.005)
gd1 = graph(title='v vs t', xtitle='t', ytitle='v', ymax=1, xmax=2, background=vector(0.3,0.3,0.3))
vt1 = gcurve(graph=gd1, color=vector(0.5,0.5,0.5))
vt2 = gcurve(graph=gd1, color=color.orange)
# 2. 物體設定
ball_iron = sphere(radius=0.05, pos=vector(-0.2,0,0), texture=textures.metal)
ball_iron.m = 4
ball_iron.v = 0.25
ball_pingpong = sphere(radius=0.02, pos=vector(0.1,0,0), color=color.orange)
ball_pingpong.m = 0.2
ball_pingpong.v = 0
# 3. 定義函數
def collide(v1,v2,m1,m2):
v1f = v1*(m1-m2)/(m1+m2) + v2*2*m2/(m1+m2)
v2f = v1*2*m1/(m2+m1) + v2*(m2-m1)/(m2+m1)
return v1f, v2f
# 4. 物體運動
dt = 0.001
t = 0
while t < 2:
rate(200)
t += dt
ball_iron.pos.x = ball_iron.pos.x + ball_iron.v * dt
vt1.plot(pos=(t, ball_iron.v))
ball_pingpong.pos.x = ball_pingpong.pos.x + ball_pingpong.v * dt
vt2.plot(pos=(t, ball_pingpong.v))
if mag(ball_iron.pos-ball_pingpong.pos) < (ball_iron.radius+ball_pingpong.radius):
ball_iron.v, ball_pingpong.v = collide(ball_iron.v,ball_pingpong.v,ball_iron.m,ball_pingpong.m)
|
作業:
以做不同質量的兩球的碰撞的觀察,球1撞球2。
(1)球1的質量等於球2。
(2)球1的質量遠大於球2。
(3)球1的質量遠小於球2。
以上三種情況選擇其中一種繳交作業即可,並寫下觀察心得。
本單元課程自2018.7.5日起已被瀏覽 241 次