Try   HackMD

靜電力及簡諧

作者:王一哲
日期:2018/5/9


我們之前在〈重力及簡諧〉當中處理過重力造成的簡諧運動,當我們學到靜電力時會發現庫侖定律和萬有引力定律的型式很像,因此靜電力應該也能產生相同的運動模式。以下有 3 個不同的程式:


程式 19-1

理論推導

如下圖所示,有兩個電量為

+Q 的點電荷,兩者位置固定、距離為
2d
,在連心線上中央偏左側距離
x
處,有一個電量為
+q
、質量為
m
的點電荷。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

+q 點電荷在此處的速度為0,
xd
,只考慮物體間靜電力的作用,則
+q
所受合力方向向右,量值為

F=kQq(dx)2kQq(d+x)2=kQq[(d+x)2(dx)2(dx)2(d+x)2]=kQq[4dxd4(1xd)2(1+xd)2]4kQqd3x=Kx

因此

+q 做簡諧運動,週期

T=2πmK=2πmd34kQq=πmd3kQq

下圖是以

Q=q=2×104 C 繪製的靜電力F-距離x關係圖,由圖中可以看出當x很小時,
Fx
,且斜率約等於 1.5,與理論值相符。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
靜電力F-距離x關係圖 (0 ≤ x ≤ 9)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
靜電力F-距離x關係圖 (0 ≤ x ≤ 4)

程式 19-1.靜電力造成的簡諧運動(放置在連心線中點右側) (取得程式碼

""" VPython教學: 19-1.靜電力造成的簡諧運動(放置在連心線中點右側) Ver. 1: 2018/3/14 Ver. 2: 2019/9/15 作者: 王一哲 """ from vpython import * """ 1. 參數設定, 設定變數及初始值, 當 h << d 時週期理論值 5.2345 s """ size, m = 1, 1 # 小球半徑, 質量 q, Q = 2E-4, 2E-4 # 小球電量, 大球電量 d, h = 10, 3 # 大球之間距離的0.5倍, 小球在連心線中點右側的距離 k = 8.988E9 # 靜電力常數 i, t, dt = 0, 0, 0.001 # 小球回到初位置的次數, 時間, 時間間隔 """ 2. 畫面設定 """ # 產生動畫視窗 scene = canvas(title="Electric Force and Simple Harmonic Motion", width=600, height=600, x=0, y=0, center=vec(0, 0, 0), background=color.black, range=1.2*d) # 產生固定位置的大球、可移動的小球 s1 = sphere(pos=vec(-d, 0, 0), radius=size, color=color.blue) s2 = sphere(pos=vec(d, 0, 0), radius=size, color=color.blue) ball = sphere(pos=vec(h, 0, 0), v=vec(0, 0, 0), radius=0.4*size, color=color.red, m=m) # 畫大球連心線、平衡點、端點位置 line = cylinder(pos=s1.pos, axis=s2.pos-s1.pos, radius=0.1*size, color=color.yellow) center = cylinder(pos=vec(0, -2, 0), axis=vec(0, 4, 0), radius=0.1*size, color=color.white) right = cylinder(pos=vec(h, -2, 0), axis=vec(0, 4, 0), radius=0.1*size, color=color.white) left = cylinder(pos=vec(-h, -2, 0), axis=vec(0, 4, 0), radius=0.1*size, color=color.white) # 產生代表速度、加速度的箭頭 arrow_v = arrow(pos=ball.pos+vec(0, 1, 0), axis=vec(0, 0, 0), shaftwidth=0.3*size, color=color.green) arrow_a = arrow(pos=ball.pos+vec(0, 2, 0), axis=vec(0, 0, 0), shaftwidth=0.3*size, color=color.magenta) # 繪圖部分 gd = graph(title="plot", width=600, height=450, x=0, y=600, xtitle="<i>t</i> (s)", ytitle="blue: <i>x</i> (m), green: <i>v</i> (m/s), magenta: <i>a</i> (m/s<sup>2</sup>)") xt = gcurve(graph=gd, color=color.blue) vt = gcurve(graph=gd, color=color.green) at = gcurve(graph=gd, color=color.magenta) """ 3. 物體運動部分, 小球來回 5 次時停止 """ while i < 5: rate(1000) # 計算小球所受靜電力並存到變數 F r1 = ball.pos - s1.pos r2 = ball.pos - s2.pos F1 = (k*Q*q) / r1.mag2 * r1.norm() F2 = (k*Q*q) / r2.mag2 * r2.norm() F = F1 + F2 # 計算運動中小球的加速度、速度、位置, 畫出代表速度、加速度的箭頭 ball.a = F/ball.m ball.v += ball.a*dt ball.pos += ball.v*dt arrow_v.pos = ball.pos + vec(0, 1, 0) arrow_a.pos = ball.pos + vec(0, 2, 0) arrow_v.axis = ball.v arrow_a.axis = ball.a # 畫出 x-t, v-t, a-t 圖 xt.plot(pos=(t, ball.pos.x)) vt.plot(pos=(t, ball.v.x)) at.plot(pos=(t, ball.a.x)) # 判斷小球是否回到出發點, 計算回到出發點的次數 if(ball.pos.x >= h and ball.v.x >= 0): print(t) i += 1 # 更新時間 t += dt

參數設定

在此設定變數為Q、q、m、size、d、h、k、i、t、dt,用途已寫在該行的註解當中。


畫面設定

  1. 將大球放置於 (-d, 0, 0) 及 (d, 0, 0) 處,將小球放置於 (h, 0, 0)、初速度為 0、質量為 m。

  2. 畫大球間的連線。小球初位置為右端點,因此左端點應該位於 x = -h 處,於端點處畫線標記位置。

  3. 產生表示速度、加速度的箭頭,為了使箭頭不要疊在一起,分別畫在小球上方距離為 1、2 兩處。

  4. 開啟繪圖視窗,畫小球的位置、速度、加速度與時間關係圖。


物體運動

  1. 為了使動畫在小球來回 5 次時停止,將 while 迴圈當中的條件設定為 i < 5,並用 if(ball.pos.x >= h and ball.v.x >= 0) 判斷小球是否回到出發點,若回到出發點則印出經過的時間 t 及回到出發點的次數 i 。

  2. 利用庫侖定律計算小球所受合力 F,再由 F = ma 計算小球的加速度,更新速度及位置。

  3. 最後畫 x-tv-ta-t 圖,更新時間。


模擬結果

若以程式當中設定數值為例,當 h 很小的時候,週期理論值為 5.2345 ;若 h = 0.00001 則週期為 5.238000000000084;若 h = 3 則週期為 4.881999999999965;若 h = 6 則週期為 3.7829999999996944。若從 x-tv-ta-t 圖來看,當 h = 3 時圖形相當接近 cos、-sin、-cos 的樣子,但是當 h = 6 時圖形就很奇怪了。


Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
程式 19-1 畫面截圖

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
程式 19-1:h = 3 的 x-tv-ta-t

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
程式 19-1:h = 6 的 x-tv-ta-t

程式 19-2

理論推導

如下圖所示,有兩個電量為

+Q 的點電荷,兩者位置固定、距離為
2R
,在兩者中垂線上距離
x
處,有一個電量為
q
、質量為
m
的點電荷。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

q 點電荷在此處的速度為0,
xR
,只考慮物體間靜電力的作用,則
q
所受合力方向向下,量值為

F=kQqR2+x2xR2+x22=2kQqxR3(1+x2R2)322kQqR3x=Kx

因此

q 做簡諧運動,週期

T=2πmK=2πmR32kQq

下圖是以

Q=q=2×104 C 繪製的靜電力F-距離x關係圖,由圖中可以看出當x很小時,
Fx
,且斜率約等於 0.7,與理論值相符。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
靜電力F-距離x關係圖 (0 ≤ x ≤ 100)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
靜電力F-距離x關係圖 (0 ≤ x ≤ 10)

程式 19-2.靜電力造成的簡諧運動(放置在中垂線上方) (取得程式碼

""" VPython教學: 19-2.靜電力造成的簡諧運動(放置在中垂線上方) Ver. 1: 2018/3/14 Ver. 2: 2019/9/15 作者: 王一哲 """ from vpython import * """ 1. 參數設定, 設定變數及初始值, 當 h << d 時週期理論值 7.4075 s """ size, m = 1, 1 # 小球半徑, 質量 q, Q = -2E-4, 2E-4 # 小球電量, 大球電量 d, h = 10, 3 # 大球之間距離的0.5倍, 小球在連心線中點右側的距離 k = 8.988E9 # 靜電力常數 i, t, dt = 0, 0, 0.001 # 小球回到初位置的次數, 時間, 時間間隔 """ 2. 畫面設定 """ # 產生動畫視窗 scene = canvas(title="Electric Force and Simple Harmonic Motion", width=600, height=600, x=0, y=0, center=vec(0, 0, 0), background=color.black, range=1.2*d) # 產生固定位置的大球、可移動的小球 s1 = sphere(pos=vec(-d, 0, 0), radius=size, color=color.blue) s2 = sphere(pos=vec(d, 0, 0), radius=size, color=color.blue) ball = sphere(pos=vec(0, h, 0), v=vec(0, 0, 0), radius=0.4*size, color=color.red, m=m) # 畫大球連心線、平衡點、端點位置 line = cylinder(pos=s1.pos, axis=s2.pos-s1.pos, radius=0.1*size, color=color.yellow) top = cylinder(pos=vec(-2, h, 0), axis=vec(4, 0, 0), radius=0.1*size, color=color.white) bottom = cylinder(pos=vec(-2, -h, 0), axis=vec(4, 0, 0), radius=0.1*size, color=color.white) # 產生代表速度、加速度的箭頭 arrow_v = arrow(pos=ball.pos+vec(1, 0, 0), axis=vec(0, 0, 0), shaftwidth=0.3*size, color=color.green) arrow_a = arrow(pos=ball.pos+vec(2, 0, 0), axis=vec(0, 0, 0), shaftwidth=0.3*size, color=color.magenta) # 繪圖部分 gd = graph(title="plot", width=600, height=450, x=0, y=600, xtitle="<i>t</i> (s)", ytitle="blue: <i>y</i> (m), green: <i>v</i> (m/s), magenta: <i>a</i> (m/s<sup>2</sup>)") yt = gcurve(graph=gd, color=color.blue) vt = gcurve(graph=gd, color=color.green) at = gcurve(graph=gd, color=color.magenta) """ 3. 物體運動部分, 小球來回 5 次時停止 """ while i < 5: rate(1000) # 計算小球所受靜電力並存到變數 F r1 = ball.pos - s1.pos r2 = ball.pos - s2.pos F1 = (k*Q*q) / r1.mag2 * r1.norm() F2 = (k*Q*q) / r2.mag2 * r2.norm() F = F1 + F2 # 計算運動中小球的加速度、速度、位置, 畫出代表速度、加速度的箭頭 ball.a = F/ball.m ball.v += ball.a*dt ball.pos += ball.v*dt arrow_v.pos = ball.pos + vec(1, 0, 0) arrow_a.pos = ball.pos + vec(2, 0, 0) arrow_v.axis = ball.v arrow_a.axis = ball.a # 畫出 y-t, v-t, a-t 圖 yt.plot(pos=(t, ball.pos.y)) vt.plot(pos=(t, ball.v.y)) at.plot(pos=(t, ball.a.y)) # 判斷小球是否回到出發點, 計算回到出發點的次數 if(ball.pos.y >= h and ball.v.y >= 0): print(t) i += 1 # 更新時間 t += dt

程式設計部分

程式 19-2 與 19-1 幾乎一樣,以下只講解不同之處。

  1. 將小球放置於 (0, h, 0)。

  2. 小球初位置為上端點,因此下端點應該位於 y = -h 處,於端點處畫線標記位置。

  3. 表示速度、加速度的箭頭改成畫在小球右方距離為 1、2 兩處。

  4. 判斷小球是否回到出發點的條件改 if(ball.pos.y >= h and ball.v.y >= 0) 。


模擬結果

若以程式當中設定數值為例,當 h 很小的時候,週期理論值為 7.4075 ;若 h = 0.00001 則週期為 7.408000000000809;若 h = 3 則週期為 7.778000000000932;若 h = 9 則週期為 10.478999999999631。若從 y-tv-ta-t 圖來看,當 h = 3 時圖形相當接近 cos、-sin、-cos 的樣子,但是當 h = 9 時圖形就很奇怪了。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
程式 19-2 畫面截圖

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
程式 19-2:h = 3 的 y-tv-ta-t

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
程式 19-2:h = 9 的 y-tv-ta-t

程式 19-3

理論推導

如下圖所示,有一個半徑為

R 的環,圓環總電量為
+Q
,電量均勻分布。若圓環位置固定,在兩者圓心上於距離
x
處,有一個電量為
q
、質量為
m
的點電荷。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

q 點電荷在此處的速度為0,
xR
,只考慮物體間靜電力的作用。計算
q
所受合力時,可以先將圓環分割成
N
個小球,每小球的電量為
ΔQ=Q/N
q
所受靜電力沿著連線方向,在另一側會有大小相等、左右方向相反的力,因此
q
合力方向向下,量值為

F=kQqR2+x2xR2+x2=kQqxR3(1+x2R2)32kQqxR3=Kx

因此

q 做簡諧運動,週期

T=2πmK=2πR3kQq


程式 19-3.靜電力造成的簡諧運動(圓環, 放置在中垂線上方) (取得程式碼

""" VPython教學: 19-3.靜電力造成的簡諧運動(圓環, 放置在中垂線上方) Ver. 1: 2018/3/14 Ver. 2: 2019/9/15 作者: 王一哲 """ from vpython import * """ 1. 參數設定, 設定變數及初始值, 當 h << d 時週期理論值 5.29348 s """ size, m = 0.4, 1 # 小球半徑, 質量 q, Q = -2E-4, 8E-4 # 小球電量, 圓環總電量 r, N = 10, 100 # 圓環的半徑, 圓環分割成小球的數量 dQ = Q/N # 圓環分割後每個小球的電量 h = 9 # 小球在星球連線的中垂線上的距離 k = 8.988E9 # 靜電力常數 j, t, dt = 0, 0, 0.001 # 小球回到初位置的次數, 時間, 時間間隔 """ 2. 畫面設定 """ # 產生動畫視窗 scene = canvas(title="Electric Force and Simple Harmonic Motion", width=600, height=600, x=0, y=0, center=vec(0, h, 0), background=color.black) scene.camera.pos = vec(0, 0.2, 0.8)*3*r scene.camera.axis = vec(0, -0.2, -0.8)*3*r # 產生可移動的小球 ball = sphere(pos=vec(0, h, 0), v=vec(0, 0, 0), radius=size, color=color.red, m=m) # 產生帶電圓環及空白 list, 用 for 迴圈產生圓環分割後的小球並填入空白 list 中 Q_ring = ring(pos=vec(0, 0, 0), axis=vec(0, 1, 0), radius=r, thickness=0.4*size, color=color.green) charges = [] for i in range(0, N): charges.append(sphere(pos=vec(r*cos(i*2*pi/N), 0, r*sin(i*2*pi/N)), radius=0.5*size, color=color.blue)) # 畫圓環直徑、小球運動端點位置 line1 = cylinder(pos=vec(-r, 0, 0), axis=vec(2*r, 0, 0), radius=0.1*size, color=color.yellow) line2 = cylinder(pos=vec(0, 0, -r), axis=vec(0, 0, 2*r), radius=0.1*size, color=color.yellow) top = cylinder(pos=vec(-2, h, 0), axis=vec(4, 0, 0), radius=0.1*size, color=color.white) bottom = cylinder(pos=vec(-2, -h, 0), axis=vec(4, 0, 0), radius=0.1*size, color=color.white) # 產生代表速度、加速度的箭頭 arrow_v = arrow(pos=ball.pos+vec(1, 0, 0), axis=vec(0, 0, 0), shaftwidth=0.8*size, color=color.green) arrow_a = arrow(pos=ball.pos+vec(2, 0, 0), axis=vec(0, 0, 0), shaftwidth=0.8*size, color=color.magenta) # 繪圖部分 gd = graph(title="plot", width=600, height=450, x=0, y=600, xtitle="<i>t</i> (s)", ytitle="blue: <i>y</i> (m), green: <i>v</i> (m/s), magenta: <i>a</i> (m/s<sup>2</sup>)") yt = gcurve(graph=gd, color=color.blue) vt = gcurve(graph=gd, color=color.green) at = gcurve(graph=gd, color=color.magenta) """ 3. 物體運動部分, 小球來回 5 次時停止 """ while j < 5: rate(1000) # 用 for 迴圈將 charges 當中的小球依序讀取出來指定給變數 charge, 計算小球的靜電力並存到變數 F F = vec(0, 0, 0) for charge in charges: r = ball.pos - charge.pos f = (k*dQ*q) / r.mag2 * r.norm() F += f # 計算運動中小球的加速度、速度、位置, 畫出代表速度、加速度的箭頭 ball.a = F/ball.m ball.v += ball.a*dt ball.pos += ball.v*dt arrow_v.pos = ball.pos+vec(1, 0, 0) arrow_a.pos = ball.pos+vec(2, 0, 0) arrow_v.axis = ball.v arrow_a.axis = ball.a # 畫出 y-t, v-t, a-t 圖 yt.plot(pos=(t, ball.pos.y)) vt.plot(pos=(t, ball.v.y)) at.plot(pos=(t, ball.a.y)) # 判斷小球是否回到出發點, 計算回到出發點的次數 if(ball.pos.y >= h and ball.v.y >=0): print(t) j += 1 # 更新時間 t += dt

程式設計部分

程式 19-3 與 19-2 幾乎一樣,差別在於先將圓環切成 N 個小球,再利用 for 迴圈計算分割後的每一小段圓環與可移動小球之間的靜電力,最後求出可移動小球的合力。


模擬結果

若以程式當中設定數值為例,當 h 很小的時候,週期理論值為 5.29348 ;若 h = 0.00001 則週期為 5.238000000000084;若 h = 3 則週期為 5.500000000000171;若 h = 9 則週期為 7.409000000000809。若從y-tv-ta-t 圖來看,當 h = 3 時圖形相當接近 cos、-sin、-cos 的樣子,但是當 h = 9 時圖形就很奇怪了。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
程式 19-3 畫面截圖

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
程式 19-3:h = 3 的 y-tv-ta-t

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
程式 19-3:h = 9 的 y-tv-ta-t

結語

以前講這類的題目時只能由數學式子推導週期,但是學生很難憑空想像小球的運動過程,利用這個動畫可以讓小球動起來,學生會比較有印象。


VPython官方說明書

  1. canvas: http://www.glowscript.org/docs/VPythonDocs/canvas.html
  2. sphere: http://www.glowscript.org/docs/VPythonDocs/sphere.html
  3. arrow: http://www.glowscript.org/docs/VPythonDocs/arrow.html
  4. cylinder: http://www.glowscript.org/docs/VPythonDocs/cylinder.html
  5. ring: http://www.glowscript.org/docs/VPythonDocs/ring.html
  6. graph: http://www.glowscript.org/docs/VPythonDocs/graph.html

tags:VPython