|
graph=定義一個繪圖的物件,在物件中控制這個繪圖視窗的長寬x跟y的最大和最小值 定義整個圖的標題(title),x軸(xtitle)和y軸(ytitle)的標題 定義繪圖視窗中的數據畫圖物件,gdots=點圖,gcurve=曲線圖,label=數據的標示 用plot指令下達繪圖命令 |
GlowScript 3.2 VPython
scene = canvas(width=500, height=500, center=vec(20, 10, 0),align='left')
ball=sphere(pos=vec(0 ,0, 0),radius=0.5, color=color.green,make_trail=True)
arrow(pos=vec(0,0,0), axis=vec(40,0,0), shaftwidth=0.05, headwidth=0.1)
g1 = gdisplay(width=500, height=500,
title='拋體運動的動能和位能(K/U) vs. t', xtitle='t', ytitle='K/U',
xmin=0, xmax=4, ymin=0, ymax=250,
foreground=color.black, background=color.white,align='right')
f1 = gcurve(graph=g1,color=color.blue, label="K")
f2 = gcurve(graph=g1,color=color.red, label="U")
t=0; dt=0.01; m=1; g=9.8; v0=20; theta=pi/3; ball.v=vec(v0*cos(theta),v0*sin(theta),0)
K=1/2*m*mag2(ball.v); U=m*g*ball.pos.y
f1.plot(t,K); f2.plot(t,U)
scene.pause()
while t < 4:
rate(50)
if(ball.pos.y < 0): break
ball.v+=vec(0,-g,0)*dt
ball.pos+=ball.v*dt
K=1/2*m*mag2(ball.v); U=m*g*ball.pos.y
f1.plot(t,K); f2.plot(t,U)
t+=dt
glowscript: PS-graph-1.py(動畫+畫圖(graph)兩個視窗) |
|
glowscript: PS-graph-2.py同時呈現兩個畫圖(graph)的視窗 glowscript: PS-2scenes.py同時呈現兩個動畫(canvas)的視窗 |
|
GlowScript 3.2 VPython
# 設計一個函數來計算一個在坐標向量rq位置的點電荷點點荷(q),
# 在坐標向量r位置貢獻的電場向量E,電場大小Es, V=電位
# mag(A)=向量A的長度;為了計算方便我們將庫倫常數ke設定為1.
def EFV_point(q,rq,r):
ke=1.
rrq=r-rq
rrq0=mag(rrq)
Es=ke*q/rrq0**2
V=ke*q/rrq0
E=ke*q*rrq/rrq0**3
return E,Es,V
q=1.; rq=vec(0.,0.,0.)
N=20; dx=0.1
# 沿著x軸畫出20個點每個點的間距為0.1
# graph=定義一個繪圖的物件,在物件中控制這個繪圖視窗的長寬x跟y的最大和最小值
# 定義整個圖的標題(title),x軸(xtitle)和y軸(ytitle)的標題
gd = graph(width=800, height=600, background=color.black,
title='Electric field and potential of a point charge',
xtitle='x', ytitle='E/V' ,xmin=0, xmax=2.2, ymin=0, ymax=10)
# 定義繪圖視窗中的數據畫圖物件,gdots=點圖,gcurve=曲線圖,label=數據的標示
f1 = gcurve(color=color.cyan, label="E(x)電場大小")
f2 = gdots(color=color.green, label="V(x)電位")
# 沿著x軸跑過20個點,每個點的間距為0.1
for i in range(N):
x=dx*(i+1)
r=vec(x,0,0)
# 呼叫函數計算在這個x座標處的電場和電位
E,Es,V=EFV_point(q,rq,r)
# 用plot指令下達繪圖命令
f1.plot(x,Es)
f2.plot(x,V)
glowscript:PS-EL-03.py
|
|
GlowScript 3.2 VPython
def EFV_point(q,rq,r):
ke=1.
rrq=r-rq
rrq0=mag(rrq)
Es=ke*q/rrq0**2
V=ke*q/rrq0
E=ke*q*rrq/rrq0**3
return E,Es,V
# 兩個點電荷的電量和座標位置向量
q1=1.; rq1=vec(0.,0.,0.)
q2=1.; rq2=vec(4.,0.,0.)
N=38; dx=0.1
scene=canvas(width=500, height=500, center=vector(2.5,1,0), align='left')
X=arrow(pos=vec(0,0,0),axis=vec(5,0,0),shaftwidth=0.02,headwidth=0.04,color=vec(1,1,1))
Y=arrow(pos=vec(0,0,0),axis=vec(0,2,0),shaftwidth=0.02,headwidth=0.04,color=vec(1,1,1))
Z=arrow(pos=vec(0,0,0),axis=vec(0,0,0.5),shaftwidth=0.02,headwidth=0.04,color=vec(1,1,1))
Q1=sphere(pos=rq1,radius=0.1,color=vec(1,1,0))
Q2=sphere(pos=rq2,radius=0.1,color=vec(1,1,0))
s=0.1
gd = graph(width=400, height=500, background=color.black,
title='Electric field 2 point charges at x=0 and x=4',
xtitle='x', ytitle='E/V' ,xmin=0, xmax=4.2, ymin=0, align='right')
f1 = gcurve(color=color.cyan, label="y=0.5")
f2 = gcurve(color=color.green, label="y=1.0")
for i in range(N):
x=dx*(i+1)
#---------------- y=0.5
r1=vec(x,0.5,0)
E1,Es1,V1=EFV_point(q1,rq1,r1) # q1的電場貢獻
E2,Es2,V2=EFV_point(q2,rq2,r1) # q2的電場貢獻
E=E1+E2
Es=mag(E)
f1.plot(x,Es)
arrow(pos=r1,axis=E*s,shaftwidth=0.02,headwidth=0.04,color=vec(1,0,1))
#--------------- y=1.0
r2=vec(x,1.0,0)
E1,Es1,V1=EFV_point(q1,rq1,r2)
E2,Es2,V2=EFV_point(q2,rq2,r2)
E=E1+E2
Es=mag(E)
f2.plot(x,Es)
arrow(pos=r2,axis=E*s,shaftwidth=0.02,headwidth=0.04,color=vec(1,0,1))
glowscript:PS-EL-04.py
|
|
|
雖然電偶極有兩個電荷,但是因為兩個電荷的電性相反,因此他們合成的電場貢獻反而會隨著距離衰減的程度較單獨一顆點電荷更為快速。我們可以從理論上的計算發現,在遠離電荷的座標處,點電荷的衰減函數是距離平方反比,但是電偶極的電場衰減是距離的三次方反比定律。
|
GlowScript 3.2 VPython
def EFV_point(q,rq,r):
ke=1.
rrq=r-rq
rrq0=mag(rrq)
Es=ke*q/rrq0**2
V=ke*q/rrq0
E=ke*q*rrq/rrq0**3
return E,Es,V
# 單獨一個點電荷黃色表示;電偶極當中的正電荷的紅色表示,藍色球表示負電荷
q0=1.; rq0=vec(0.,0.,0.)
q1=1.; rq1=vec(-1,0.,0.)
q2=-1; rq2=vec(1,0.,0.)
N=200; dx=0.1
scene=canvas(width=800, height=600, center=vector(0,3,0))
X=arrow(pos=vec(-1.2,0,0),axis=vec(2.4,0,0),shaftwidth=0.02,headwidth=0.04,color=vec(1,1,1))
Y=arrow(pos=vec(0,0,0),axis=vec(0,8,0),shaftwidth=0.02,headwidth=0.04,color=vec(1,1,1))
Q0=sphere(pos=rq0,radius=0.1,color=vec(1,1,0))
Q1=sphere(pos=rq1,radius=0.1,color=vec(1,0,0))
Q2=sphere(pos=rq2,radius=0.1,color=vec(0,0,1))
gd = graph(width=800, height=600, background=color.black,
title='Electric field 2 point charges at x=0 and x=4',
xtitle='x', ytitle='E', ymax=0.1) # ,xmin=0, xmax=4.2, ymin=0)
f1 = gcurve(color=color.cyan, label="only 1 q")
f2 = gcurve(color=color.green, label="q and -q")
for i in range(N):
x=0.1+dx*(i)
r=vec(0,x,0)
E,Es,V=EFV_point(q0,rq0,r)
Es1=mag(E)
f1.plot(x,Es1)
E1,Es1,V1=EFV_point(q1,rq1,r)
E2,Es2,V2=EFV_point(q2,rq2,r)
Ed=E1+E2
Es2=mag(Ed)
f2.plot(x,Es2)
glowscript:PS-EL-05.py
|
|
|
glowscript:PS-EL-06.py
|
|
|
glowscript:PS-EL-07.py
|