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