彈性碰撞
-
一維空間的彈性碰撞
- 程式碼
Web VPython 3.2 # 匯入視覺化套件 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。
以上三種情況選擇其中一種繳交作業即可,並寫下觀察心得。