|
| |
|
在這個作業當中我們有四個均勻的磁場分別侷限在4個圓柱形的區域當中,如圖所示,只有在圓柱形的區域當中磁場存在,在其他的區域是沒有磁場的。四個區域當中的磁場方向交錯。我們考慮6個帶電的粒子,帶電粒子運動的時間錯開,每個粒子相隔4秒之後開始運動。6個帶電的粒子出發點的位置相同但是初速度不同,越來越快。這6個粒子陸續進入磁場中的軌跡不同,最後的軌跡如圖片中所示,細節的運動模擬如下面的影片所示。請同學們以下面提供的程式為基礎,試圖做出做出整個運動的模擬。 | |
|
|
GlowScript 3.2 VPython
scene=canvas(width=800, height=550, center=vec(0, 0, 0), forward=vec(0,0,-1))
q=1; m=1; r=1.; v=0.6;NB=3; Rc=0.3; x0=2; y0=0.4
ball0 = sphere(pos=vec(0,0,0), radius = 0.05, make_trail=True, color=color.red)
balls = [sphere(pos=vec(x0,-0.4+0.0*i,0), radius = 0.05, make_trail=True, color=vec(((i+1)%4/4),((i+1)%3/3),((i+1)%5/5))) for i in range(NB)]
arrx=arrow(pos=vec(0,0,0),axis=vec(3,0,0),shaftwidth=0.02,headwidth=0.02,color=vec(1,0,0))
arrY=arrow(pos=vec(0,0,0),axis=vec(0,3,0),shaftwidth=0.02,headwidth=0.02,color=vec(0,1,0))
arrZ=arrow(pos=vec(0,0,0),axis=vec(0,0,3),shaftwidth=0.04,headwidth=0.02,color=vec(0,0,1))
CY=[cylinder(pos=vec(0,0,-1),axis=vec(0,0,2),radius=Rc,color=vec(1,1,1),opacity=0.5) for i in range(2)]
CY[0].pos=vec(0.5,0.5,0);CY[1].pos=vec(0.5,-0.5,0);
print_options(width=800, height=100)
B=[vec(0,0,4*(-1)**(i+1)) for i in range(2)]
print('CY pos=',[CY[i].pos for i in range(2)])
print('B=',B)
for i in range(NB): balls[i].v=vec(-(v+0.2*i),0,0)
print('balls pos=',[balls[i].pos for i in range(NB)])
print('balls v=',[balls[i].v for i in range(NB)])
t=0.; dt = 0.001; NR=int(1./dt)
time='{:02d}'.format(t)
T=label(text=time,pos=vector(1.2,1.5,0))
#scene.pause('click')
while t < 13:
rate(NR)
time='{:02d}'.format(t); T.text=time
for i in range(NB):
if(t < 4*i): continue
balls[i].a=vec(0,0,0)
if(mag(balls[i].pos) > 3): continue
for j in range(2):
rho=sqrt((balls[i].pos.x-CY[j].pos.x)**2+(balls[i].pos.y-CY[j].pos.y)**2)
if(rho < Rc): balls[i].a=q*cross(balls[i].v,B[j])/m;
balls[i].v += balls[i].a*dt
balls[i].pos += balls[i].v*dt
t=t+dt
for i in range(NB):
label(text=str(i),pos=balls[i].pos*1.1,box=False)
|
|
|
| |
|
帶電粒子在磁瓶子的磁場當中運動影片 |
GlowScript 3.2 VPython
scene=canvas(width=800,height=600,center=vec(0,0,2),background=vec(0,0,0),forward=vec(-1,-1,-1))
print_options(width=800, height=100)
def BF_coil_2(R,Z2,Ni,ic,r,br,bc):
mu0=1.
ds=2.*pi*R/Ni
B=vec(0.,0.,0.)
for i in range(Ni):
t=2.*pi/Ni*i
rp=vec(R*cos(t),R*sin(t),0)
dl=ds*vec(-sin(t),cos(t),0.)
rrp=r-rp
dB=mu0*ic/4.*pi*cross(dl,rrp)/mag(rrp)**3
B=B+dB
for i in range(Ni):
t=2.*pi/Ni*i
rp=vec(R*cos(t),R*sin(t),Z2)
dl=ds*vec(-sin(t),cos(t),0.)
#if(curr==0): arr=arrow(pos=rp, axis=dl,shaftwidth=0.02, color=vec(0.5,0,0.5))
rrp=r-rp
rrp0=mag(rrp)
dB=mu0*ic/4.*pi*cross(dl,rrp)/rrp0**3
B=B+dB
return B
def Bline(R,Z2,Ni,ic,r,br,bc,a):
maxi=2000
ss=0.01
ri=r
for i in range(maxi):
B=BF_coil_2(R,Z2,Ni,ic,r,br,bc)
curr=1
nr=r+B/mag(B)*ss
arr=arrow(pos=r,axis=nr-r,shaftwidth=0.02,headwidth=0.02,color=a)
r=nr
dr=mag(r-ri)
if(i>100 and dr < 0.08): break
if(i>100 and dr > 3.5): break
return
ic=30; R=1.; Z2=4; Ni=40; br=0.1
print('ic=',ic,' R=',R,' Z2=',Z2)
arrx=arrow(pos=vec(0,0,0),axis=vec(2,0,0),shaftwidth=0.02,headwidth=0.02,color=vec(1,0,0))
arrY=arrow(pos=vec(0,0,0),axis=vec(0,2,0),shaftwidth=0.02,headwidth=0.02,color=vec(0,1,0))
arrZ=arrow(pos=vec(0,0,0),axis=vec(0,0,6),shaftwidth=0.04,headwidth=0.02,color=vec(0,0,1))
ring(pos=vec(0,0,0),radius=R,axis=vec(0,0,1),color=vec(1,1,1),thickness=0.02)
ring(pos=vec(0,0,Z2),radius=R,axis=vec(0,0,1),color=vec(1,1,1),thickness=0.02)
[sphere(pos=vec(-0.7+0.2*i,0.0,0),color=vec(0,0.5,1),radius=0.05) for i in range(8)]
arrow(pos=vec(0,R,0),axis=vec(-0.3,0,0),shaftwidth=0.04,color=vec(1,1,0))
scene.pause('click')
bc=vec(1,0.5,0)
NC=8
for i in range(NC):
t=2*pi/NC*i
xi=0.5*cos(t)
yi=0.5*sin(t)
r=vec(xi,yi,0)
Bline(R,Z2,Ni,ic,r,br,bc,bc)
scene.pause('click')
m=1; q=1; v0=2; th=pi/2; rq=vec(0.1*R*cos(th),0.1*R*sin(th),0.5); vq=vec(-sin(th),cos(th),0.00)*v0
b=sphere(pos=rq,color=vec(1,1,0),radius=0.05,make_trail=True,retain=50)
b.v=vq
time='{:02d}'.format(t)
T=label(text=time,pos=vector(1.2,1.5,0))
t=0; dt=0.0001; NR=int(1/dt)
print('m=',m,' q=',q,' rq=',rq,' vq=',vq,' dt=',dt)
scene.pause('click')
while t < 4.1:
rate(NR/4)
time='{:02d}'.format(t); T.text=time
b.pos+=vec(0,0,1)*dt
t+=dt
| |
|
| |