何云存
(湖北大學(xué)物理與電子科學(xué)學(xué)院 湖北 武漢 430062)
任 濤
(武漢電力職業(yè)技術(shù)學(xué)院輸配電工程系 湖北 武漢 430074)
振動,在大學(xué)物理課程中有著承上啟下的地位.上承力學(xué),質(zhì)點受線性回復(fù)力時,根據(jù)牛頓第二定律求解動力學(xué)方程,可得質(zhì)點的運動方程呈三角函數(shù)形式,運動形式為簡諧振動;下接波動以及光學(xué),波動即是質(zhì)點振動狀態(tài)的傳播,振動的合成是波疊加,以及光的干涉衍射現(xiàn)象的理論基礎(chǔ).一維簡諧振動的合成使用旋轉(zhuǎn)矢量法很好理解,二維和三維簡諧振動的合成較一維復(fù)雜得多,對學(xué)生的空間想象能力要求較高,傳統(tǒng)教學(xué)中往往只講解一維簡諧振動的合成.為了幫助學(xué)生建立完整的知識體系,使用形象直觀的方法展現(xiàn)二維三維簡諧振動的合成是有必要的.
計算機技術(shù)的日益發(fā)展,使物理教學(xué)更具生動多樣性,能幫助學(xué)生理解抽象的物理問題,同時激發(fā)學(xué)生的學(xué)習(xí)興趣[1].開源免費,語法簡單的Python編程語言近年來不僅被廣泛用于金融工程、科學(xué)研究,而且被用于輔助教學(xué).Python擁有很多功能強大的第三方庫,Vpython是一個三維圖形庫,可用于模擬仿真物體的運動[2].本文使用Vpython將二維三維簡諧振動的合成可視化,當(dāng)分振動的頻率滿足整數(shù)比值時,可形成穩(wěn)定封閉的李薩如圖形,該方法有助于學(xué)生理解簡諧振動合成的原理以及性質(zhì).
兩個分振動的振動方向分別沿x軸、y軸,分振動的方程形式為
x=A1cos(ω1t+φ1)
y=A2cos(ω2t+φ2)
其中A,ω,φ分別表示振幅、角頻率、初相位.首先考慮分振動頻率相同的情況,使用Vpython編程,代碼如下:
#第一部分:調(diào)入3D模塊Vpython,建立畫布和坐標(biāo)軸
from vpython import *
s1=canvas(width=1000,height=1000,x=0,y=0,background=color.white)
x = arrow(pos=vector(0,0,0),axis=vector(6,0,0),shaftwidth=0.1,color=color.black)
x_text=label(pos=vector(6.5,0,0),text="x",height=30,opacity=0,box=0)
y = arrow(pos=vector(0,0,0),axis=vector(0,6,0),shaftwidth=0.1,color=color.black)
y_text=label(pos=vector(0,6.7,0),text="y",height=30,opacity=0,box=0)
#第二部分:設(shè)定初始條件,建立一個藍色小球作為振動物體
A1=4
A2=5
w1=pi
w2=pi
phi1=0
phi2=pi/3
t=0
dt=0.001
ball = sphere(pos=vector(A1*cos(phi1), A2*cos(phi2), 0), radius=0.5, color=color.blue,
make_trail=True)
#第三部分:循環(huán)體實現(xiàn)動態(tài)模擬
while True:
rate(500)
phi1=phi1+w1*dt
ball.pos.x=A1*cos(phi1)
phi2=phi2+w2*dt
ball.pos.y=A2*cos(phi2)
t=t+dt
第三部分是程序的核心部分,程序運行結(jié)果如圖1所示,可以看到小球沿著橢圓軌道順時針方向運動,若交換兩個分振動的初始相位值,可看到小球軌跡不變,但是運動方向變成逆時針.當(dāng)振幅、頻率固定時,相位差決定軌跡的形狀.
圖1 同頻率的二維簡諧振動合成
若分振動的頻率不同,但是具有簡單的整數(shù)比值,可形成穩(wěn)定封閉的李薩如圖形.李薩如圖形與x軸、y軸的切點數(shù)目之比,與分頻率之比呈反比.通過修改代碼中分振動的頻率以及初相位,我們得到幾組不同的李薩如圖形.
在圖2中,(a)、(b)分振動的初相位相同,初相位差相同,x軸、y軸分頻率之比分別是2∶3和3∶2,顯然頻率之比對軌跡形狀有影響.圖2(a)閉合曲線沿x軸切點數(shù)目3,沿y軸切點數(shù)目為2,圖2(b)沿x軸切點數(shù)目2,沿y軸切點數(shù)目3,驗證了切點數(shù)目之比與分頻率之比呈反比的結(jié)論.
(b)
(a)
振動方向相互正交的3個分振動頻率滿足整數(shù)比時,質(zhì)點在空間中的運動軌跡呈三維李薩如圖形.分振動的方程形式為
x=A1cos(ω1t+φ1)
y=A2cos(ω2t+φ2)
z=A3cos(ω3t+φ3)
此處以
A1=A2=A3=5
為例,分振動頻率之比
ω1∶ω2∶ω3=1∶2∶3
三維振動合成的可視化需要在程序第一部分加上攝像機位置和角度的設(shè)定,即給定一個觀察3D運動的視角.使用代碼s1.camera.pos=vector(20,20,20)表示攝像機位置在x=20,y=20,z=20的空間點處,s1.camera.axis=vector(-20,-20,-20)表示攝像機方位正對著坐標(biāo)原點.第二部分加入第三個分振動的初始信息,第三部分循環(huán)體中加入質(zhì)點z軸坐標(biāo)的計算公式ball.pos.z=A3*cos(phi3),運行得到對應(yīng)視角下的三維李薩如圖形,如圖5所示.
圖5 三維簡諧振動的合成
在Vpython模塊下,我們可以身臨其境般進入到三維空間任意位置觀察質(zhì)點的運動,只需改變攝像機位置和方向的設(shè)定,修改代碼s1.camera.pos=vector(-20,20,20),s1.camera.axis=vector(20,
-20,-20),表示攝像機的位置和角度與第一次設(shè)定關(guān)于yz平面對稱,此時看到的軌跡如圖6所示.
圖6 變換視角的三維簡諧振動合成圖
為了方便觀察三維李薩如圖形與xy平面、xz平面、yz平面的切點數(shù)目Nxy,Nxz,Nyz,我們可以站在y軸向下觀察立體曲線在xz平面的投影圖,站在z軸向下觀察立體曲線在xy平面的投影圖,如圖7所示.
從圖中看到曲線與xy平面的切點數(shù)目Nxy=3,與xz平面的切點數(shù)目Nxz=2,與yz平面的切點數(shù)目Nyz=1.平面圖中沿x軸切點看似不在一條直線上,這是由于攝像機向下俯視,切點高度不一樣所導(dǎo)致的視覺效果.與二維李薩如圖形特點一致,各方向切點數(shù)目之比由頻率之比決定,即
Nyz∶Nxz∶Nxy=ω1∶ω2∶ω3
本文使用Python編程語言框架下的3D圖形庫Vpython,對二維、三維簡諧振動的合成進行了可視化模擬,探討了李薩如圖形的特點,特別是對三維李薩如圖形的模擬,解決了平面思維的困難,將質(zhì)點的運動過程形象直觀地呈現(xiàn)出來,有益于學(xué)生更加全面深刻地理解振動現(xiàn)象.Python語言簡單易學(xué),功能強大,除了可視化模擬,還可用于各種物理問題中的數(shù)值計算、建模分析等,是我們學(xué)習(xí)物理課程以及科研探索的現(xiàn)代化手段.