作者:王一哲
日期:2019/3/29
如下圖所示,在平行於
(A) 任何時刻質點的加速度朝向
(B) 任何時刻磁場對質點不作功
(C) 任何時刻電場對質點不作功
(D) 任何時刻磁場對質點的作用力為零
(E) 質點在此電磁場中的運動軌跡為圓形
質點會同時受到靜電力及磁力的作用,兩者分別為
質點的加速度方向會隨著速度而改變,當速度為0時磁力為0,只有
由於
由於
由於
質點在此電磁場中的運動軌跡不會是圓形,(E)選項錯誤。
from vpython import *
"""
1. 參數設定, 設定變數及初始值
"""
size, m, q = 0.005, 1E-10, 1E-9 # 粒子半徑, 質量, 電量
v0 = vec(0, 0, 0) # 粒子速度
L = 0.4 # 坐標軸長度
limit = 2*L # 邊界
B_field = vec(0, 0, 10) # 磁場
E_field = vec(0, 10, 0) # 電場
t, dt = 0, 1E-5 # 時間, 時間間隔
"""
2. 畫面設定
"""
# 產生動畫視窗
scene = canvas(title="Charged Particle in Electric Field and Magnetic Field", width=800, height=600, x=0, y=0,
center=vec(0.1*L, 0.1*L, 0), range=0.6*L, background=color.black)
# 產生帶電粒子
charge = sphere(pos=vec(0, 0, 0), radius=2*size, v=v0, color=color.red, m=m, make_trail=True)
# 產生坐標軸及標籤
arrow_x = arrow(pos=vec(-L/2, 0, 0), axis=vec(L, 0, 0), shaftwidth=0.6*size, color=color.yellow)
label_x = label(pos=vec(L/2, 0, 0), text="x", xoffset=25, color=color.yellow, font="sans")
arrow_y = arrow(pos=vec(0, -L/2, 0), axis=vec(0, L, 0), shaftwidth=0.6*size, color=color.yellow)
label_y = label(pos=vec(0, L/2, 0), text="y", yoffset=25, color=color.yellow, font="sans")
arrow_z = arrow(pos=vec(0, 0, -L/2), axis=vec(0, 0, L), shaftwidth=0.6*size, color=color.yellow)
label_z = label(pos=vec(0, 0, L/2), text="z", xoffset=-25, yoffset=-25, color=color.yellow, font="sans")
# 產生表示磁場的箭頭及標籤
arrow_B = arrow(pos=vec(-L/2, 0, 0), axis=B_field.norm()*0.1, shaftwidth=size, color=color.green)
label_B = label(pos=vec(-L/2, 0, 0), text="B", xoffset=25, yoffset=25, color=color.green, font="sans")
arrow_E = arrow(pos=vec(-L/2, L/4, 0), axis=E_field.norm()*0.1, shaftwidth=size, color=color.cyan)
label_E = label(pos=vec(-L/2, L/4, 0), text="E", xoffset=25, yoffset=25, color=color.cyan, font="sans")
# 產生表示速度、加速度的箭頭
arrow_v = arrow(pos=charge.pos, shaftwidth=0.5*size, color=color.blue)
arrow_a = arrow(pos=charge.pos, shaftwidth=0.5*size, color=color.magenta)
"""
3. 物體運動部分
"""
while(abs(charge.pos.x) < limit and abs(charge.pos.y) < limit and abs(charge.pos.z) < limit):
rate(500)
# 計算帶電粒子所受合力, 更新帶電粒子加速度、速度、位置
F = q*cross(charge.v, B_field) + q * E_field
charge.a = F/charge.m
charge.v += charge.a*dt
charge.pos += charge.v*dt
# 更新表示速度、加速度的箭頭, 只畫出方向以避免動畫自動縮小
arrow_v.pos = charge.pos
arrow_a.pos = charge.pos
arrow_v.axis = charge.v.norm()*0.1
arrow_a.axis = charge.a.norm()*0.1
# 更新時間
t += dt
這個程式是以〈帶電粒子在磁場中的運動〉當中的程式修改而成,差別在於
由於粒子初速度為0,此時只有受到
這是一個很難憑空想像的題目,但是藉由 VPython 我們可以很輕鬆地畫出粒子的運動過程,這就是學習程式語言能帶來的好處。
VPython
、Physics