摘要:針對PowerPoint的強大功能,本文結(jié)合課件《簡諧運動》的制作過程,歸納了利用PowerPoint中的VBA制作交互式物理課件的基本策略、動畫實現(xiàn)方法與技巧。
關(guān)鍵詞:PowerPoint;VBA;物理課件;交互性
PowerPoint課件由于制作方便、快捷,深受大家喜愛。但絕大多數(shù)由PowerPoint制作的課件交互功能差、動畫簡單、形式呆板,成了名副其實的幻燈片,尤其是交互性強的動畫模擬課件很少見到。因此,許多人錯誤地認為PowerPoint只是制作幻燈片的簡單工具,功能有限,不可能制作出交互性很強的課件。通過反復(fù)地思考和摸索,我們發(fā)現(xiàn)可以利用PowerPoint中的VBA制作出交互性很強、動感十足且符合物理運動規(guī)律的課件,下面就粗略介紹一下《簡諧運動》課件的制作方法及關(guān)鍵技術(shù)。
● 課件制作的原理和實現(xiàn)的功能
1.彈簧振子做簡諧運動動畫的實現(xiàn)
彈簧振子的振動過程也就是小球的運動過程。設(shè)定一個時間間隔,只要計算出每個時間間隔后小球圓心的位置,也就知道了小球的運動軌跡。我們可以把實際問題轉(zhuǎn)化為運用循環(huán)結(jié)構(gòu)和簡諧運動規(guī)律來計算圓心運動軌跡的過程。具體算法如下:簡諧運動中彈簧振子離開平衡位置的位移x隨時間t變化的函數(shù)表達式為:,彈簧振子的速度v隨時間t變化的關(guān)系為:,彈簧振子的加速度a隨時間t變化的關(guān)系為:,其中A為振幅, 為角速度,即,T是振動周期,是初相位。假設(shè)振子運動的角速度ω=1,初相位=0,簡諧運動的函數(shù)表達式簡化為:,。運動時間t初值為0,輸入振幅A,計算出彈簧振子的位移x、速度v和加速度a,累加小球運動的時間t=t+0.1,直到t大于所設(shè)定的時間結(jié)束。
2.課件實現(xiàn)的功能
點擊“演示”按鈕時,課件可以動態(tài)地模擬彈簧振子振動的全過程,同時繪制振動圖像,“演示”按鈕同時自動變?yōu)椤扒宄卑粹o,點擊“清除”按鈕可以清除圖像;分別點擊“顯示位移”、“顯示速度”、“顯示回復(fù)力”按鈕,可以動態(tài)顯示位移、速度和回復(fù)力的大小和方向隨時間變化的矢量圖,同時這些按鈕自動變?yōu)椤半[藏位移”、“隱藏速度”、“隱藏回復(fù)力”,分別點擊它們可以隱藏位移、速度和回復(fù)力的矢量圖;文本框中輸入振幅值可以改變振子的振幅A;點擊“退出”按鈕可退出課件,運行效果如下圖所示。
● 簡諧運動課件的制作
1.添加對象
(1)啟動PowerPoint 2003,插入一張空白幻燈片,通過“視圖/工具欄”菜單打開“繪圖”和“控件工具箱”這兩個工具欄。
(2)坐標(biāo)的繪制。使用繪圖工具欄上的箭頭工具,按住Shift鍵,繪制一條自左向右的箭頭作為水平時間軸,再次使用箭頭工具,按住Shift鍵,繪制一條從上向下的箭頭作為豎直位移軸,分別右鍵單擊箭頭彈出快捷菜單,選擇“設(shè)置自選圖形格式”命令,打開設(shè)置自選圖形格式對話框,分別在“顏色和線條、尺寸、大小”選項卡下做相應(yīng)設(shè)置,點擊“確定”按鈕即可。再使用繪圖工具欄上的文本框工具,給橫軸標(biāo)上“t/s”,縱軸標(biāo)上“x/m”。
(3)小球的繪制。使用繪圖工具欄上的“橢圓工具”,按住Shift鍵,繪制一個適當(dāng)大小的圓形作為彈簧振子;再繪制一個直徑為1mm的圓形作為振動圖像的一個像點。
(4)彈簧的添加。先利用Windows附件中的畫圖軟件制作彈簧圖片,通過“插入/圖片/來自文件”菜單插入彈簧圖片,右鍵單擊圖片彈出快捷菜單,選擇“設(shè)置自選圖形格式”命令,打開設(shè)置自選圖形格式對話框,在“尺寸”選項卡中取消“鎖定縱橫比”選項,其他選項卡根據(jù)需要做相應(yīng)設(shè)置。
(5)矢量圖的繪制。使用繪圖工具欄上的箭頭工具,按住Shift鍵,繪制一條自上向下的箭頭作為方向向下的位移矢量,然后復(fù)制這個箭頭,右鍵單擊箭頭彈出快捷菜單,選擇“設(shè)置自選圖形格式”命令,打開設(shè)置自選圖形格式對話框,在“尺寸”選項卡旋轉(zhuǎn)選項中輸入180度,使箭頭向上。同樣方法繪制速度矢量箭頭和回復(fù)力矢量箭頭,為了區(qū)別各矢量圖可設(shè)置不同顏色代表不同的物理量。
(6)矢量標(biāo)簽的添加。點擊菜單欄“視圖/工具欄/控件工具箱”命令彈出控件工具箱,點擊“標(biāo)簽”圖標(biāo)添加標(biāo)簽,右鍵單擊標(biāo)簽,在彈出的快捷菜單中點擊“屬性”命令,打開“屬性”對話框,將“Caption”屬性改為“位移”, 屬性“AutoSize”改為“True”,屬性“ForeColor”改為與位移箭頭相同的顏色。同理,添加“速度”和“回復(fù)力”標(biāo)簽。
(7)輸入文本框的添加。在控件工具箱中,點擊“文本框”圖標(biāo)添加文本框,根據(jù)需要設(shè)置屬性。再使用繪圖工具欄上的文本框工具,分別在“文本框”兩側(cè)添加“振幅”和“cm”字樣。
(8)按鈕的添加。在控件工具箱中,點擊“命令按鈕”圖標(biāo)添加按鈕,右鍵單擊“命令按鈕”,在彈出的快捷菜單中點擊“屬性”命令,打開“屬性”對話框,將“名稱”和“Caption”屬性都改為“演示”,屬性“AutoSize”改為“True”。同理,再添加8個“命令按鈕”,將“名稱”和“Caption”屬性分別改為“清除”、“顯示位移”、“隱藏位移”、“顯示速度”、“隱藏速度”、“顯示回復(fù)力”、“隱藏回復(fù)力”和“退出”,屬性“AutoSize”都改為“True”。
通過鼠標(biāo)移動這些命令按鈕,分別使“演示”和“清除”按鈕、“顯示位移”和“隱藏位移”按鈕、“顯示速度”和“隱藏速度”按鈕、“顯示回復(fù)力”和“隱藏回復(fù)力”按鈕完全疊加重合。再選中所有的按鈕,點擊繪圖工具欄上的“繪圖/對齊或分布/頂端對齊”命令,可以使它們上下對齊;再次點擊“繪圖/對齊或分布/橫向分布”命令,使它們橫向等距離分布。
(9)對象名稱的確定。點擊菜單欄“工具/宏/錄制新宏”命令,打開錄制新宏對話框,使用默認宏名并單擊“確定”按鈕,單擊選定小球,單擊浮動工具欄中的“停止錄制”命令,結(jié)束宏錄制。點擊菜單欄“工具/宏/宏”命令,選中剛才錄制的宏名并單擊“編輯”按鈕,打開VBA編輯窗口,在代碼中可以看到小球的名稱為Shapes(“Oval 8”)。同理,錄制振動圖像的像點名稱為Shapes(“Oval 9”),前半周期的位移矢量名稱為Shapes(“l(fā)ine 10”),后半周期的位移矢量名稱為Shapes(“l(fā)ine 11”),前半周期的速度矢量名稱為Shapes(“l(fā)ine 28”),后半周期的速度矢量名稱為Shapes(“l(fā)ine 29”),前半周期的回復(fù)力矢量名稱為Shapes(“l(fā)ine 31”),后半周期的回復(fù)力矢量名稱為Shapes(“l(fā)ine 30”)。
2.編寫宏代碼
在幻燈片中雙擊按鈕或文本框等控件進入宏編輯窗口,并輸入以下代碼:
Dim A As Single '定義變量A為單精度
Sub csjs() '通過輸入文本框給振幅A賦值
A = Val(TextBox1.Text)
End Sub
Private Sub 演示_Click()
演示.Visible = False
清除.Visible = True
csjs
For i = 0 To 250
x1 = 110
y1 = A * Cos(t) '位移矢量
t = t + 0.1
Shapes("Oval 8").Left = x1 '小球的橫坐標(biāo),對象名稱必須與在宏中定義的名稱一致
Shapes("Oval 8").Top = y1 + 215 '小球的縱坐標(biāo)
Shapes("Picture 12").Height = y1 + 215 ' 彈簧的伸縮
Shapes("line 10").Height = A * Cos(t)
Shapes("line 11").Height = -A * Cos(t)
Shapes("line 28").Height = -A * Sin(t)
Shapes("line 29").Height = A * Sin(t)
Shapes("line 28")Top = y1 + 215
Shapes("line 29").Top = y1 + 215
Shapes("line 31").Height = -A * Cos(t)
Shapes("line 30").Height = A * Cos(t)
With Shapes("Oval 9").Duplicate '復(fù)制振動圖像的像點到下列坐標(biāo)位置
.Left = 22 * t + 130
.Top = y1 + 220
End With
T1 = Timer '控制動畫速度
While Timer - T1 < 0.001 :DoEvents :Wend
Next
SlideShowWindows(1).View.GotoSlide 1 '頁面刷新的語句
End Sub
Private Sub 清除_Click()
清除.Visible = False
演示.Visible = True
n = Shapes.Count '統(tǒng)計頁面上的對象數(shù)
b = 30
Dim J As Integer
For J = n To b Step -1
Shapes(J).Delete '清除頁面上指定的對象
T1 = Timer
While Timer - T1 < 0.01 :DoEvents :Wend
Next
TextBox1.Value = 70
SlideShowWindows(1).View.GotoSlide 1
End Sub
Private Sub 顯示回復(fù)力_Click()
顯示回復(fù)力.Visible = False
隱藏回復(fù)力.Visible = True
Shapes("line 30").Visible = True
Shapes("line 31").Visible = True
Label4.Visible = True
SlideShowWindows(1).View.GotoSlide 1
End Sub
Private Sub 隱藏回復(fù)力_Click()
隱藏回復(fù)力.Visible = False
顯示回復(fù)力.Visible = True
Shapes("line 30").Visible = False
Shapes("line 31").Visible = False
Label4.Visible = False
SlideShowWindows(1).View.GotoSlide 1
End Sub
Private Sub 退出_Click()
Application.Quit
End Sub
同理,“顯示速度”、“顯示位移”按鈕代碼與“顯示回復(fù)力”按鈕代碼相同,“隱藏速度”、“隱藏位移”按鈕代碼與“隱藏回復(fù)力”按鈕代碼相同。
● 制作課件過程中遇到的問題及解決的方法
(1)代碼中要引用有關(guān)控件或?qū)ο蟮拿Q,但是只有從“控件工具箱”中添加的控件才能在屬性窗口中查到其名稱,對于從繪圖工具欄中繪制的各種自選圖形以及“插入”菜單中插入的文本框、圖片和表格等對象其名稱便無從得知。獲取名稱的唯一方法是針對這些對象錄制一段臨時宏,然后在宏代碼中去查找。
(2)在模擬彈簧的伸縮動畫時,利用Height屬性改變圖片的高度來實現(xiàn),但是PowerPoint默認值是鎖定縱橫比,彈簧伸縮時不但縱向伸縮,而且橫向也在伸縮。所以,需要在彈簧圖片的“尺寸”選項卡中取消“鎖定縱橫比”選項。
(3)在模擬各矢量大小變化時,也是利用Height屬性改變箭頭的高度來實現(xiàn),但是PowerPoint默認狀態(tài)下只是矢量圖的下端伸縮,而上端無變化,在需要矢量圖的上端伸縮時,可以先畫一個向下的箭頭,再在箭頭的“尺寸”選項卡旋轉(zhuǎn)選項中輸入180度,單擊“確定”使箭頭向上。
(4)在利用Delete命令清除圖像時,會把繪制的像點以及后來添加的對象全部清除掉,因此,制作課件時要在程序執(zhí)行Shapes(J).Delete命令前一次性添加好所有控件和對象,在執(zhí)行Shapes(J).Delete命令時,J的初始值必須大于界面上添加的所有控件和對象數(shù)。
(5)由于課件命令按鈕較多,界面顯得比較凌亂無序,我們采用了Visible屬性使按鈕顯示和隱藏交替出現(xiàn),在同一位置設(shè)計兩個按鈕,保證界面美觀有序。
(6)制作好的課件不能正常運行。為了防范宏病毒對計算機的侵害,一般情況下,在PowerPoint的工具菜單中對宏的安全性設(shè)置為“高”選項,這時將拒絕執(zhí)行VBA代碼。在確保VBA代碼運行無害的前提下,需要降低PowerPoint的安全等級以使VBA代碼得以執(zhí)行。單擊菜單欄“工具/宏/安全性”命令,打開“安全性”對話框,單擊“安全級”選項卡,選擇“中”或“低”選項,單擊“確定”即可。