電場canvas+graph


▶點電荷的電場2(graph and scene)

1. VPYTHON / canvas + graph

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)的視窗




2. 點電荷的電場畫圖(我們先專注在graph的用法)

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


3. 2點電荷(+,- or +,+)的電場

  • 在x軸上兩個座標點的位置各放上一顆點電荷
  • 計算兩個點電荷的電場共線之向量和
  • 沿著y座標是0.5和1的兩個平行於x軸的直線計算電場大小
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


4. 比較點電荷與電偶極的電場

雖然電偶極有兩個電荷,但是因為兩個電荷的電性相反,因此他們合成的電場貢獻反而會隨著距離衰減的程度較單獨一顆點電荷更為快速。我們可以從理論上的計算發現,在遠離電荷的座標處,點電荷的衰減函數是距離平方反比,但是電偶極的電場衰減是距離的三次方反比定律。

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


5.直線電荷所建立的電場

單一點電荷所建立的電場大小,隨著與電荷距離的變化是平方反比定律;但是如果把電荷均勻地排成一條無窮長的直線時,電場的大小與距離成1次方反比定律;如果把電荷平均地分佈在一個平面上,這個平面將會造就出一個常數的電場,電場大小與距離完全無關。如果我們有一個正電荷和一個負電荷分隔一段距離形成一個所謂的電偶極,那麼在遠離這個電偶極的地方去測量電場的話,會發現電場的大小隨著遠離電偶極的距離是3次方反比定律。我們希望能夠藉由下面的數值計算來驗證這些重要結果。
glowscript:PS-EL-06.py


6.平面電荷所建立的電場

單一點電荷所建立的電場大小,隨著與電荷距離的變化是平方反比定律;但是如果把電荷均勻地排成一條無窮長的直線時,電場的大小與距離成1次方反比定律;如果把電荷平均地分佈在一個平面上,這個平面將會造就出一個常數的電場,電場大小與距離完全無關。如果我們有一個正電荷和一個負電荷分隔一段距離形成一個所謂的電偶極,那麼在遠離這個電偶極的地方去測量電場的話,會發現電場的大小隨著遠離電偶極的距離是3次方反比定律。我們希望能夠藉由下面的數值計算來驗證這些重要結果。
glowscript:PS-EL-07.py