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