1 引言
李薩如圖形是一個(gè)質(zhì)點(diǎn)的運(yùn)動(dòng)軌跡[1],該質(zhì)點(diǎn)在兩個(gè)垂直方向的分運(yùn)動(dòng)都是簡諧運(yùn)動(dòng)。李薩如圖形是物理學(xué)的重要內(nèi)容之一,在工程技術(shù)領(lǐng)域也有很重要的應(yīng)用。利用李薩如圖形可以測量未知振動(dòng)的頻率和初相位,掌握李薩如圖形的形成過程有很重要的意義。因而動(dòng)態(tài)顯示李薩如可以深入理解其形成過程。
假定形成李薩如圖形的兩個(gè)簡諧運(yùn)動(dòng),一個(gè)在X軸上,一個(gè)在Y軸上,
它們的運(yùn)動(dòng)方程為(假設(shè)它們的振幅相等):它們的合運(yùn)動(dòng)軌跡就是李薩如圖形。為了能夠形象地描述李薩如圖形的形成過程,一般是把X軸和Y軸上的簡諧運(yùn)動(dòng)分別用旋轉(zhuǎn)矢量圖來描述,如圖1所示。由上式計(jì)算出不同時(shí)刻的質(zhì)點(diǎn)的坐標(biāo)(x,y),依次連接這些點(diǎn),得到的圖形就是李薩如圖形。

圖1 李薩如圖形的形成過程
2 李薩如圖形動(dòng)態(tài)演示的制作原理
為了動(dòng)態(tài)演示李薩如圖形的形成過程,需要把描述兩個(gè)簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量的運(yùn)動(dòng)過程和它們的合運(yùn)動(dòng)過程動(dòng)態(tài)地畫出來。
具體的做法是:
(1)畫出描述X、Y方向簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量的參考圖,分別由兩條垂直的直線,一個(gè)圓構(gòu)成;
(2)通過計(jì)算,分別畫出從圓心出發(fā)的代表X、Y方向簡諧運(yùn)動(dòng)旋轉(zhuǎn)矢量位置的直線;
(3)畫出合運(yùn)動(dòng)的定位線,得到屬于李薩如圖形的點(diǎn)的坐標(biāo),如果是第一個(gè)點(diǎn),則直接描點(diǎn);否則與前一點(diǎn)相連,得到質(zhì)點(diǎn)的運(yùn)動(dòng)軌跡;
(4)擦去兩個(gè)旋轉(zhuǎn)矢量和合運(yùn)動(dòng)定位線;
(5)繼續(xù)計(jì)算下一點(diǎn)的坐標(biāo),再回到第2步重復(fù)進(jìn)行;
(6)直到暫?;蚪K止程序運(yùn)行。
按照以上的算法,用VB6.0編制程序[2, 3]。運(yùn)行程序,發(fā)現(xiàn)在擦去合運(yùn)動(dòng)的定位線的同時(shí),把X、Y方向簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量圖和李薩如圖形也擦去了一部分。例如圖1中的A、B、C、D和E點(diǎn)等都被擦去,經(jīng)過一段時(shí)間以后,X、Y方向簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量圖和李薩如圖形都變成了虛線圖,不再是一幅完整的圖形。
為了得到良好的視覺效果,應(yīng)該使上述被擦掉的部分能夠及時(shí)補(bǔ)畫上。對于X、Y方向簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量圖,由于它是由規(guī)則的直線和圓畫出的,因而再次重畫相應(yīng)的直線和圓即可。而李薩如圖形是不規(guī)則的,被擦去的點(diǎn)的坐標(biāo),當(dāng)然可以通過計(jì)算的方法得到,但是從圖1可以看出,這種計(jì)算是相當(dāng)復(fù)雜的,因?yàn)樵谝话闱闆r下,很難準(zhǔn)確判斷李薩如圖形中被擦去的是哪些點(diǎn)。
為了解決這個(gè)問題,考試大采取的辦法是,在程序中引入兩個(gè)數(shù)組,用這兩個(gè)數(shù)組來依次記錄計(jì)算得到的李薩如圖形的點(diǎn)的坐標(biāo)(x,y)值,在擦去合成線以后,再次根據(jù)數(shù)組中的數(shù)據(jù)重新繪畫被損壞的圖形。
繪制李薩如圖形的程序源碼如下:
Private Sub Timer1_Timer()
DrawWidth = 2
'清除動(dòng)畫顯示區(qū)域
If i = 1 Then
Line (Xxc - wid, Yyc - wid)-(Xxc + wid, Yyc + wid), BackColor, BF
End If
'擦去圖形,形成動(dòng)畫效果
Line (Xxc, Xyc)-(Xx, Xy), BackColor
Line (Yxc, Yyc)-(Yx, Yy), BackColor
Line (Xx, Xy)-(Xx, Yy), BackColor
Line (Yx, Yy)-(Xx, Yy), BackColor
'畫X方向的簡諧振動(dòng)的旋轉(zhuǎn)矢量圖
Line (Xxc - wid, Xyc)-(Xxc + wid, Xyc), RGB(255, 0, 0) '畫X軸
Line (Xxc, Xyc - wid)-(Xxc, Xyc + wid), RGB(255, 0, 0) '畫Y軸
Circle (Xxc, Xyc), A, RGB(255, 0, 0) '畫圓
'畫Y方向的簡諧振動(dòng)的旋轉(zhuǎn)矢量圖
Line (Yxc - wid, Yyc)-(Yxc + wid, Yyc), RGB(255, 0, 0) '畫X軸
Line (Yxc, Yyc - wid)-(Yxc, Yyc + wid), RGB(255, 0, 0) '畫Y軸
Circle (Yxc, Yyc), A, RGB(255, 0, 0) '畫圓
'畫李薩如圖形的坐標(biāo)軸
Line (Xxc - wid, Yyc)-(Xxc + wid, Yyc), RGB(255, 0, 0) '畫X軸
Line (Xxc, Yyc - wid)-(Xxc, Yyc + wid), RGB(255, 0, 0) '畫Y軸
'計(jì)算相位
If i = 1 Then '初相位
Xxw = Xchxw * pi / 180
Yxw = Ychxw * pi / 180
Else 't時(shí)刻相位
Xxw = Xxw + 2 * Xpl * pi / 400
Yxw = Yxw + 2 * Ypl * pi / 400
End If
'畫X軸的旋轉(zhuǎn)矢量
Xx = Xxc + A * Cos(Xxw)
Xy = Xyc - A * Sin(Xxw)
Line (Xxc, Xyc)-(Xx, Xy), RGB(0, 0, 255)
'畫Y軸的旋轉(zhuǎn)矢量
Yx = Yxc - A * Sin(Yxw)
Yy = Yyc - A * Cos(Yxw)
Line (Yxc, Yyc)-(Yx, Yy), RGB(0, 0, 255)
'顯示畫圖過程
Line (Xx, Xy)-(Xx, Yy), RGB(0, 255, 0)
Line (Yx, Yy)-(Xx, Yy), RGB(0, 255, 0)
'李薩如圖形坐標(biāo)
X(i) = Xx
Y(i) = Yy
'畫李薩如圖形
If i = 1 Then
PSet (Xx, Yy)
Else
DrawWidth = 1
For j = 2 To i
Line (X(j - 1), Y(j - 1))-(X(j), Y(j)), RGB(0, 0, 255)
Next j
End If
i = i + 1
If i > 900 Then i = 1
End Sub
3 程序的運(yùn)行
圖2是程序界面和程序運(yùn)行時(shí)的情況。

圖2 程序的運(yùn)行結(jié)果
考試大對程序進(jìn)行了大量的調(diào)試。結(jié)果表明,用這種方法制作動(dòng)畫,程序簡單,運(yùn)行流暢,并且用此方法制作動(dòng)態(tài)演示在編程上也易于實(shí)現(xiàn)。
考試大在編制動(dòng)態(tài)演示程序的時(shí)候,經(jīng)常會(huì)遇到類似的情況,即動(dòng)態(tài)演示過程中出現(xiàn)部分圖形被擦除的現(xiàn)象。使用數(shù)組保存圖形數(shù)據(jù)不失為制作此類動(dòng)畫演示程序的一種比較簡單易行的方法。
以上程序在Windows XP和VB6.0下調(diào)試通過。
李薩如圖形是一個(gè)質(zhì)點(diǎn)的運(yùn)動(dòng)軌跡[1],該質(zhì)點(diǎn)在兩個(gè)垂直方向的分運(yùn)動(dòng)都是簡諧運(yùn)動(dòng)。李薩如圖形是物理學(xué)的重要內(nèi)容之一,在工程技術(shù)領(lǐng)域也有很重要的應(yīng)用。利用李薩如圖形可以測量未知振動(dòng)的頻率和初相位,掌握李薩如圖形的形成過程有很重要的意義。因而動(dòng)態(tài)顯示李薩如可以深入理解其形成過程。
假定形成李薩如圖形的兩個(gè)簡諧運(yùn)動(dòng),一個(gè)在X軸上,一個(gè)在Y軸上,
它們的運(yùn)動(dòng)方程為(假設(shè)它們的振幅相等):它們的合運(yùn)動(dòng)軌跡就是李薩如圖形。為了能夠形象地描述李薩如圖形的形成過程,一般是把X軸和Y軸上的簡諧運(yùn)動(dòng)分別用旋轉(zhuǎn)矢量圖來描述,如圖1所示。由上式計(jì)算出不同時(shí)刻的質(zhì)點(diǎn)的坐標(biāo)(x,y),依次連接這些點(diǎn),得到的圖形就是李薩如圖形。

圖1 李薩如圖形的形成過程
2 李薩如圖形動(dòng)態(tài)演示的制作原理
為了動(dòng)態(tài)演示李薩如圖形的形成過程,需要把描述兩個(gè)簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量的運(yùn)動(dòng)過程和它們的合運(yùn)動(dòng)過程動(dòng)態(tài)地畫出來。
具體的做法是:
(1)畫出描述X、Y方向簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量的參考圖,分別由兩條垂直的直線,一個(gè)圓構(gòu)成;
(2)通過計(jì)算,分別畫出從圓心出發(fā)的代表X、Y方向簡諧運(yùn)動(dòng)旋轉(zhuǎn)矢量位置的直線;
(3)畫出合運(yùn)動(dòng)的定位線,得到屬于李薩如圖形的點(diǎn)的坐標(biāo),如果是第一個(gè)點(diǎn),則直接描點(diǎn);否則與前一點(diǎn)相連,得到質(zhì)點(diǎn)的運(yùn)動(dòng)軌跡;
(4)擦去兩個(gè)旋轉(zhuǎn)矢量和合運(yùn)動(dòng)定位線;
(5)繼續(xù)計(jì)算下一點(diǎn)的坐標(biāo),再回到第2步重復(fù)進(jìn)行;
(6)直到暫?;蚪K止程序運(yùn)行。
按照以上的算法,用VB6.0編制程序[2, 3]。運(yùn)行程序,發(fā)現(xiàn)在擦去合運(yùn)動(dòng)的定位線的同時(shí),把X、Y方向簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量圖和李薩如圖形也擦去了一部分。例如圖1中的A、B、C、D和E點(diǎn)等都被擦去,經(jīng)過一段時(shí)間以后,X、Y方向簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量圖和李薩如圖形都變成了虛線圖,不再是一幅完整的圖形。
為了得到良好的視覺效果,應(yīng)該使上述被擦掉的部分能夠及時(shí)補(bǔ)畫上。對于X、Y方向簡諧運(yùn)動(dòng)的旋轉(zhuǎn)矢量圖,由于它是由規(guī)則的直線和圓畫出的,因而再次重畫相應(yīng)的直線和圓即可。而李薩如圖形是不規(guī)則的,被擦去的點(diǎn)的坐標(biāo),當(dāng)然可以通過計(jì)算的方法得到,但是從圖1可以看出,這種計(jì)算是相當(dāng)復(fù)雜的,因?yàn)樵谝话闱闆r下,很難準(zhǔn)確判斷李薩如圖形中被擦去的是哪些點(diǎn)。
為了解決這個(gè)問題,考試大采取的辦法是,在程序中引入兩個(gè)數(shù)組,用這兩個(gè)數(shù)組來依次記錄計(jì)算得到的李薩如圖形的點(diǎn)的坐標(biāo)(x,y)值,在擦去合成線以后,再次根據(jù)數(shù)組中的數(shù)據(jù)重新繪畫被損壞的圖形。
繪制李薩如圖形的程序源碼如下:
Private Sub Timer1_Timer()
DrawWidth = 2
'清除動(dòng)畫顯示區(qū)域
If i = 1 Then
Line (Xxc - wid, Yyc - wid)-(Xxc + wid, Yyc + wid), BackColor, BF
End If
'擦去圖形,形成動(dòng)畫效果
Line (Xxc, Xyc)-(Xx, Xy), BackColor
Line (Yxc, Yyc)-(Yx, Yy), BackColor
Line (Xx, Xy)-(Xx, Yy), BackColor
Line (Yx, Yy)-(Xx, Yy), BackColor
'畫X方向的簡諧振動(dòng)的旋轉(zhuǎn)矢量圖
Line (Xxc - wid, Xyc)-(Xxc + wid, Xyc), RGB(255, 0, 0) '畫X軸
Line (Xxc, Xyc - wid)-(Xxc, Xyc + wid), RGB(255, 0, 0) '畫Y軸
Circle (Xxc, Xyc), A, RGB(255, 0, 0) '畫圓
'畫Y方向的簡諧振動(dòng)的旋轉(zhuǎn)矢量圖
Line (Yxc - wid, Yyc)-(Yxc + wid, Yyc), RGB(255, 0, 0) '畫X軸
Line (Yxc, Yyc - wid)-(Yxc, Yyc + wid), RGB(255, 0, 0) '畫Y軸
Circle (Yxc, Yyc), A, RGB(255, 0, 0) '畫圓
'畫李薩如圖形的坐標(biāo)軸
Line (Xxc - wid, Yyc)-(Xxc + wid, Yyc), RGB(255, 0, 0) '畫X軸
Line (Xxc, Yyc - wid)-(Xxc, Yyc + wid), RGB(255, 0, 0) '畫Y軸
'計(jì)算相位
If i = 1 Then '初相位
Xxw = Xchxw * pi / 180
Yxw = Ychxw * pi / 180
Else 't時(shí)刻相位
Xxw = Xxw + 2 * Xpl * pi / 400
Yxw = Yxw + 2 * Ypl * pi / 400
End If
'畫X軸的旋轉(zhuǎn)矢量
Xx = Xxc + A * Cos(Xxw)
Xy = Xyc - A * Sin(Xxw)
Line (Xxc, Xyc)-(Xx, Xy), RGB(0, 0, 255)
'畫Y軸的旋轉(zhuǎn)矢量
Yx = Yxc - A * Sin(Yxw)
Yy = Yyc - A * Cos(Yxw)
Line (Yxc, Yyc)-(Yx, Yy), RGB(0, 0, 255)
'顯示畫圖過程
Line (Xx, Xy)-(Xx, Yy), RGB(0, 255, 0)
Line (Yx, Yy)-(Xx, Yy), RGB(0, 255, 0)
'李薩如圖形坐標(biāo)
X(i) = Xx
Y(i) = Yy
'畫李薩如圖形
If i = 1 Then
PSet (Xx, Yy)
Else
DrawWidth = 1
For j = 2 To i
Line (X(j - 1), Y(j - 1))-(X(j), Y(j)), RGB(0, 0, 255)
Next j
End If
i = i + 1
If i > 900 Then i = 1
End Sub
3 程序的運(yùn)行
圖2是程序界面和程序運(yùn)行時(shí)的情況。

圖2 程序的運(yùn)行結(jié)果
考試大對程序進(jìn)行了大量的調(diào)試。結(jié)果表明,用這種方法制作動(dòng)畫,程序簡單,運(yùn)行流暢,并且用此方法制作動(dòng)態(tài)演示在編程上也易于實(shí)現(xiàn)。
考試大在編制動(dòng)態(tài)演示程序的時(shí)候,經(jīng)常會(huì)遇到類似的情況,即動(dòng)態(tài)演示過程中出現(xiàn)部分圖形被擦除的現(xiàn)象。使用數(shù)組保存圖形數(shù)據(jù)不失為制作此類動(dòng)畫演示程序的一種比較簡單易行的方法。
以上程序在Windows XP和VB6.0下調(diào)試通過。