王超 陳攀杰 周艷麗
(臺州學院物理系 浙江 臺州 318000)
圓周運動是中學物理以及大學物理力學部分中一種重要的曲線運動,其在現實生活中非常常見,如輪子繞軸的轉動、圓錐擺的運動、衛星繞地球的轉動等.通常我們只討論一個物體的圓周運動[1~5],但有時會遇到兩個都做圓周運動的物體的相對運動問題,如:地球表面的人觀察地球衛星的運動(人和衛星都繞地心做圓周運動),或者太陽系中其他行星相對地球的運動(地球和其他行星都近似繞太陽做圓周運動),地球衛星間的相對運動等[6].相對運動問題是力學部分的難點,其往往與坐標系的選取有關.以xOy平面內做圓周運動的A,B兩質點為例,當我們討論B相對于A的運動時,需要以A為原點建立二維直角坐標系(x′Ay′)并在該坐標系中討論B的運動.坐標系x′Ay′隨A點一起運動,若x′軸和y′軸始終分別與基坐標系的x軸和y軸平行,則稱x′Ay′系為平動坐標系;若x′軸和y′軸繞A點轉動,則稱x′Ay′系為轉動坐標系[7].在不同的坐標系中,B相對于A的運動軌跡往往不同.例如:我們在地球表面觀察赤道上空地球同步衛星的運動,在轉動坐標系中,衛星相對于我們靜止,而在平動坐標系中衛星則相對于我們不停地運動.
本文基于Visual Basic語言開發出用于演示二維平面內兩個做勻速圓周運動的質點的相對運動軌跡的仿真軟件,利用該軟件可以直觀演示任意參數條件下做勻速圓周運動兩質點在平動坐標系和轉動坐標系中的相對運動軌跡.
假定兩個質點1和2在基坐標系xOy平面內各自沿逆時針做勻速圓周運動,圓心坐標分別為(x01,y01)和(x02,y02),半徑分別為R1和R2,角速度分別為ω1和ω2,t= 0時刻兩質點到圓心的連線與Ox軸的夾角分別為α1和α2,則任意t時刻兩個質點在xOy平面內的坐標可表示為
(1)
(2)
若以質點1為坐標原點建立平動坐標系x1O1y1,如圖1(a)所示,則質點2相對于質點1的坐標可表示為
(3)
同理,以質點2為坐標原點建立平動坐標系x2O2y2,如圖1(a)所示,則質點1相對于質點2的坐標可表示為
(4)
對比式(3)和式(4)不難得到
(5)

(6)

(7)

圖1 平動坐標系和轉動坐標系示意圖
當ω1=ω2時,即ω1∶ω2= 1∶1,根據上述公式可以證明:無論是在平動坐標系或是在轉動坐標系,兩個質點的相對運動軌跡都為圓(圓周半徑R的大小與x01,y01,x02,y02,R1,R2,α1和α2有關,而且在某些特殊條件下R= 0,即質點相對靜止).考慮到推導過程和最終表達式非常繁瑣,這里不再列出.當ω1≠ω2時,兩個質點的相對運動軌跡很難通過直接推導進行表達.本文基于VB語言根據式(1)~(7)求出任意t時刻兩個質點在基坐標系中的坐標以及在平動坐標系和轉動坐標系中的相對坐標,繼而繪制并得到兩個質點的相對運動軌跡.
軟件程序分窗體和模塊兩部分.軟件將各種操作集中在一個窗體內,其中包含參數設置、命令按鈕和圖形輸出3個部分,如圖2所示.參數設置部分包含兩個質點在基坐標系中的圓心位置、圓周半徑、角速度、初始角度、計算時間間隔dt和計算次數Num等參數;命令按鈕部分包含系統生成、開始運動和結束程序3個按鈕;圖形輸出部分包含基坐標系中兩個質點的運動軌跡、平動坐標系和轉動坐標系中兩個質點的相對運動軌跡等5個區域.軟件程序的執行按照一定的流程進行設計,即首先進行參數設置并點擊系統生成按鈕,程序在“基坐標系中兩個質點的運動軌跡”區域繪制兩個質點的圓軌跡及初始位置;然后點擊開始運動按鈕,程序將從t= 0時刻開始每間隔dt根據式(1)~(7)計算兩個質點的位置,連續計算Num次,且每次計算都在圖形區域同步繪制質點位置代表點,從而獲得基坐標系中兩個質點的運動圖像以及兩個質點間的相對運動的動態軌跡;最后點擊結束程序,終止程序并關閉軟件,具體流程圖如圖3所示(程序代碼詳見附錄).

圖2 窗體界面

圖3 程序流程圖
作為例子,我們設定:質點1的圓心位置(0, 0),半徑為1.0,初始角度為0;質點2的圓心位置(0, 0),半徑為2,初始角度為0,即兩個質點做同心轉動.我們發現質點的相對運動軌跡形狀僅與兩個質點圓周運動角速度比值有關而與角速度具體值無關.表1給出了角速度比值ω1∶ω2分別為1∶1,1∶2和1∶3時兩質點在平動坐標系和轉動坐標系中的相對運動軌跡圖及其對應的軌跡方程.由圖可以看出,當ω1∶ω2= 1∶1時,相對運動軌跡圖形和方程都比較簡單,而當ω1∶ω2≠ 1∶1時,相對運動軌跡圖形和方程都會隨ω1∶ω2的減小(或增大)變得越來越復雜.通常情況下,轉動坐標系中兩個質點的相對運動軌跡形狀或大小不相同,而平動坐標系中兩個質點的相對運動軌跡大小相同且形狀相似,這一特點可由式(5)直接得出.
表1質點相對運動軌跡演示結果圖例

圓周運動是物理力學部分常見的曲線運動.本文基于VB語言開發出用于演示二維平面內做勻速圓周運動兩質點的相對運動軌跡的仿真軟件.在任意給定參數條件下,利用該軟件可分別繪出平動坐標系和轉動坐標系中質點的相對運動軌跡,從而形象直觀展現做勻速圓周運動兩質點的相對運動規律.該軟件可用于教師課堂演示或學生課外自主演示,拓展圓周運動和相對運動知識,使物理知識化抽象為形象生動,提高學生學習興趣和參與性.
附錄:VB程序代碼
Const unitlen1 = 500, unitlen2 = 300, boxxmax = 200, boxymax = 200, ntimemax = 1000000
Dim ntimereal As Long, ntime As Long, pdeltt As Long
Dim deltt As Double, pai As Double, i As Double, x01 As Double, y01 As Double, x02 As Double, y02 As Double, r1 As Double, r2 As Double, w1 As Double, w2 As Double, a1 As Double, a2 As Double, x1 As Double, x2 As Double, x12 As Double, x21 As Double, y1 As Double, y2 As Double, y12 As Double, y21 As Double, sx1 As Double, sx2 As Double, sx12 As Double, sx21 As Double, sy1 As Double, sy2 As Double, sy12 As Double, sy21 As Double, rx12 As Double, rx21 As Double, ry12 As Double, ry21 As Double, srx12 As Double, srx21 As Double, sry12 As Double, sry21 As Double, centerx1 As Double, centery1 As Double, centerx2 As Double, centery2 As Double, centerx3 As Double, centery3 As Double, centerx4 As Double, centery4 As Double, centerx5 As Double, centery5 As Double, deltt2 As Double, rtime As Double
'生成系統
Private Sub Command1_Click()
pai = 3.1415926
x01 = Val(Text1.Text)
y01 = Val(Text2.Text)
x02 = Val(Text3.Text)
y02 = Val(Text4.Text)
r1 = Val(Text5.Text)
r2 = Val(Text6.Text)
w1 = Val(Text7.Text)
w2 = Val(Text8.Text)
deltt = Val(Text9.Text)
ntimereal = Val(Text10.Text)
pdeltt = 100
a1 = Val(Text12.Text) * pai / 180
a2 = Val(Text13.Text) * pai / 180
deltt2 = deltt * deltt
centerx1 = Val(Picture1.Width) / 2
centery1 = Val(Picture1.Height) / 2
centerx2 = Val(Picture2.Width) / 2
centery2 = Val(Picture2.Height) / 2
centerx3 = Val(Picture3.Width) / 2
centery3 = Val(Picture3.Height) / 2
>centerx4 = Val(Picture4.Width) / 2
centery4 = Val(Picture4.Height) / 2
centerx5 = Val(Picture5.Width) / 2
centery5 = Val(Picture5.Height) / 2
x1 = x01 + r1 * Cos(a1)
y1 = y01 + r1 * Sin(a1)
x2 = x02 + r2 * Cos(a2)
y2 = y02 + r2 * Sin(a2)
x12 = x1 - x2
y12 = y1 - y2
x21 = -x12
y21 = -y12
rx12 = x12
ry12 = y12
rx21 = x21
ry21 = y21
sx01 = centerx1 + x01 * unitlen1
sy01 = centery1 - y01 * unitlen1
sx1 = centerx1 + x1 * unitlen1
sy1 = centery1 - y1 * unitlen1
sx02 = centerx1 + x02 * unitlen1
sy02 = centery1 - y02 * unitlen1
sx2 = centerx1 + x2 * unitlen1
sy2 = centery1 - y2 * unitlen1
sx12 = centerx2 + x12 * unitlen2
sy12 = centery2 - y12 * unitlen2
sx21 = centerx3 + x21 * unitlen2
sy21 = centery3 - y21 * unitlen2
srx12 = centerx4 + rx12 * unitlen2
sry12 = centery4 - ry12 * unitlen2
srx21 = centerx5 + rx21 * unitlen2
sry21 = centery5 - ry21 * unitlen2
Picture1.Cls
Picture2.Cls
Picture3.Cls
Picture4.Cls
Picture5.Cls
Picture1.FillColor = vbBlack
Picture1.FillStyle = 0
Picture1.Circle (sx01, sy01), 25, vbBlack
Picture1.FillColor = vbRed
Picture1.FillStyle = 1
Picture1.Circle (sx01, sy01), r1 * unitlen1, vbRed
Picture1.FillStyle = 0
Picture1.Circle (sx1, sy1), 100, vbRed
Picture1.FillColor = vbBlack
Picture1.FillStyle = 0
Picture1.Circle (sx02, sy02), 25, vbBlack
Picture1.FillColor = vbBlue
Picture1.FillStyle = 1
Picture1.Circle (sx02, sy02), r2 * unitlen1, vbBlue
Picture1.FillStyle = 0
Picture1.Circle (sx2, sy2), 100, vbBlue
Picture2.FillColor = vbRed
Picture2.FillStyle = 0
Picture2.Circle (sx12, sy12), 25, vbRed
Picture3.FillColor = vbBlue
Picture3.FillStyle = 0
Picture3.Circle (sx21, sy21), 25, vbBlue
Picture4.FillColor = vbRed
Picture4.FillStyle = 0
Picture4.Circle (srx12, sry12), 25, vbRed
Picture5.FillColor = vbBlue
Picture5.FillStyle = 0
Picture5.Circle (srx21, sry21), 25, vbBlue
End Sub
'開始運動
Private Sub Command2_Click()
rtime = 0#
For ntime = 1 To ntimereal
rtime = rtime + deltt
x1 = x01 + r1 * Cos(w1 * rtime + a1)
y1 = y01 + r1 * Sin(w1 * rtime + a1)
x2 = x02 + r2 * Cos(w2 * rtime + a2)
y2 = y02 + r2 * Sin(w2 * rtime + a2)
x12 = x1 - x2
y12 = y1 - y2
rx12 = x12 * Cos(w2 * rtime) + y12 * Sin(w2 * rtime)
ry12 = -x12 * Sin(w2 * rtime) + y12 * Cos(w2 * rtime)
x21 = -x12
y21 = -y12
rx21 = x21 * Cos(w1 * rtime) + y21 * Sin(w1 * rtime)
ry21 = -x21 * Sin(w1 * rtime) + y21 * Cos(w1 * rtime)
If ntime Mod pdeltt = 0 Then
sx01 = centerx1 + x01 * unitlen1
sy01 = centery1 - y01 * unitlen1
sx1 = centerx1 + x1 * unitlen1
sy1 = centery1 - y1 * unitlen1
sx02 = centerx1 + x02 * unitlen1
sy02 = centery1 - y02 * unitlen1
sx2 = centerx1 + x2 * unitlen1
sy2 = centery1 - y2 * unitlen1
sx12 = centerx2 + x12 * unitlen2
sy12 = centery2 - y12 * unitlen2
sx21 = centerx3 + x21 * unitlen2
sy21 = centery3 - y21 * unitlen2
srx12 = centerx4 + rx12 * unitlen2
sry12 = centery4 - ry12 * unitlen2
srx21 = centerx5 + rx21 * unitlen2
sry21 = centery5 - ry21 * unitlen2
If ntime Mod 10000 = 0 Then
Picture1.Cls
Picture1.FillColor = vbBlack
Picture1.FillStyle = 0
Picture1.Circle (sx01, sy01), 25, vbBlack
Picture1.FillColor = vbRed
Picture1.FillStyle = 1
Picture1.Circle (sx01, sy01), r1 * unitlen1, vbRed
Picture1.FillStyle = 0
Picture1.Circle (sx1, sy1), 100, vbRed
Picture1.FillColor = vbBlack
Picture1.FillStyle = 0
Picture1.Circle (sx02, sy02), 25, vbBlack
Picture1.FillColor = vbBlue
Picture1.FillStyle = 1
Picture1.Circle (sx02, sy02), r2 * unitlen1, vbBlue
Picture1.FillStyle = 0
Picture1.Circle (sx2, sy2), 100, vbBlue
End If
Picture2.FillColor = vbRed
Picture2.FillStyle = 0
Picture2.Circle (sx12, sy12), 25, vbRed
Picture3.FillColor = vbBlue
Picture3.FillStyle = 0
Picture3.Circle (sx21, sy21), 25, vbBlue
Picture4.FillColor = vbRed
Picture4.FillStyle = 0
Picture4.Circle (srx12, sry12), 25, vbRed
Picture5.FillColor = vbBlue
Picture5.FillStyle = 0
Picture5.Circle (srx21, sry21), 25, vbBlue
End If
Next ntime
End Sub
'結束程序
Private Sub Command3_Click()
End
End Sub