GlowScript 3.2 VPython
# 在vpython當中有一個物件叫做向量(vector,簡寫為vec)很好用,
# 並且也有許多相關的函數(mag,mag2,hat,dot,cross)可以使用,
# 在這一個基本的電場計算中我們將使用這個物件和函數.
# rq1=vec(1,0,2)有三個分量分別代表向量rq在x,y,z軸的分量rq1.x=1,rq1.y=0,rq1.z=2
q1=1.; rq1=vec(1.,0.,0.); # 點電荷的大小q1和點電荷所放置的位置向量rq1
ke=1. # 庫倫常數ke設定為1,在SI單位下k=9E9
# 我們沿著y=1,z=0與x軸平行的直線來計算點電荷在線上各點所產生的電場向量和其大小
for x in range(10):
r=vec(x,1,0) # 向量r在x,y,z軸的分量, y=1,z=0,x=0,1,2,3, ..., 9
rrq=r-rq1 # rrq=點電荷的座標點rq指向場點r的向量
rrq0=mag(rrq) # 向量rrq的大小
Es=ke*q1/mag2(rrq) # 電場的大小由庫侖定律決定,平方反比關係.mag2(rrq)=向量rrq長度的平方
E=Es*hat(rrq) # E=電場向量,hat(rrq)=取向量rrq的單位向量
print(x,r,rrq0,mag2(rrq),Es,E)
移除註解之後的程式面貌:
GlowScript 3.2 VPython
rq1.x=1,rq1.y=0,rq1.z=2
q1=1.; rq1=vec(1.,0.,0.);
ke=1.
for x in range(10):
r=vec(x,1,0)
rrq=r-rq1
rrq0=mag(rrq)
Es=ke*q1/mag2(rrq)
E=Es*hat(rrq)
print(x,r,rrq0,mag2(rrq),Es,E)
輸出的數據:
0 < 0, 1, 0 > 1.41421 2 0.5 < -0.353553, 0.353553, 0 > 1 < 1, 1, 0 > 1 1 1 < 0, 1, 0 > 2 < 2, 1, 0 > 1.41421 2 0.5 < 0.353553, 0.353553, 0 > 3 < 3, 1, 0 > 2.23607 5 0.2 < 0.178885, 0.0894427, 0 > 4 < 4, 1, 0 > 3.16228 10 0.1 < 0.0948683, 0.0316228, 0 > 5 < 5, 1, 0 > 4.12311 17 0.0588235 < 0.0570672, 0.0142668, 0 > 6 < 6, 1, 0 > 5.09902 26 0.0384615 < 0.0377146, 7.54293e-3, 0 > 7 < 7, 1, 0 > 6.08276 37 0.027027 < 0.0266593, 4.44322e-3, 0 > 8 < 8, 1, 0 > 7.07107 50 0.02 < 0.019799, 2.82843e-3, 0 > 9 < 9, 1, 0 > 8.06226 65 0.0153846 < 0.0152658, 1.90823e-3, 0 > run this code(PS-EF-01.py) in glowscript
|
GlowScript 3.0 VPython
# 設計一個函數來計算一個在坐標向量rq位置的點電荷點點荷(q),
# 在坐標向量r位置貢獻的電場向量E,電場大小Es.
# mag(A)=向量A的長度;為了計算方便我們將庫倫常數ke設定為1.
def EF_point(q,rq,r):
ke=1.
rrq=r-rq
rrq0=mag(rrq)
Es=ke*q/rrq0**2
E=ke*q*rrq/rrq0**3 #庫倫定律的基本公式
return E,Es
q=1.; rq=vec(0.,0.,0.) #點電荷的電量大小q,點電荷的位置座標向量rq
# 請同學們先自行檢驗下面三個座標點的電場大小確實和你用手算出來的結果相等
# 因為我們要反覆運用庫倫定律,因此要先確定計算機程式的寫法與實際運算是符合的
r1=vec(1,0,0)
E1,E1s=EF_point(q,rq,r1)
print(r1,'E1=',E1,' E1s=',E1s)
r2=vec(1,0,1)
E2,E2s=EF_point(q,rq,r2)
print(r2,E2,E2s)
r3=vec(1,1,1)
E3,E3s=EF_point(q,rq,r3)
print(r3,E3,E3s)
scene=canvas(width=800, height=400, center=vector(1,1,0))
box(pos=vec(1,0,1),size=vec(2,0.01,3),color=vec(0,1,1),opacity=0.2)
X=arrow(pos=vec(0,0,0),axis=vec(2,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,2),shaftwidth=0.02,headwidth=0.04,color=vec(1,1,1))
Q1=sphere(pos=rq,radius=0.3,color=vec(1,1,0)) # 用黃色的球代表點電荷
F1=sphere(pos=r1,radius=0.1,color=vec(1,1,1)) # 用白色的球代表三個座標點的位置
F2=sphere(pos=r2,radius=0.1,color=vec(1,1,1))
F3=sphere(pos=r3,radius=0.1,color=vec(1,1,1))
# 用3個粉紅色的向量代表3個座標點的位置的電場向量
A1=arrow(pos=r1,axis=E1,shaftwidth=0.02,headwidth=0.04,color=vec(1,0,1))
A2=arrow(pos=r2,axis=E2,shaftwidth=0.02,headwidth=0.04,color=vec(1,0,1))
A3=arrow(pos=r3,axis=E3,shaftwidth=0.02,headwidth=0.04,color=vec(1,0,1))
#T=text(text='設計一個函數來計算一個在坐標向量rq位置的點電荷點點荷q,')
st="""設計一個函數來計算一個在坐標向量rq位置的點電荷點點荷q
在坐標向量r位置貢獻的電場向量E,電場大小Es.
mag(A)=向量A的長度;為了計算方便我們將庫倫常數ke設定為1.
點電荷的電量大小q,點電荷的位置座標向量rq
請同學們先自行檢驗下面三個座標點的電場大小確實和你用手算出來的結果相等
因為我們要反覆運用庫倫定律,因此要先確定計算機程式的寫法與實際運算是符合的
用黃色的球代表點電荷,用白色的球代表三個座標點的位置
用3個粉紅色的向量代表3個座標點的位置的電場向量"""
print(st)
|
|
|
run this code(EL-01) in glowscript
|