在PPT课件中动态绘制各类函数曲线

时间:2022-09-25 04:41:32

在PPT课件中动态绘制各类函数曲线

摘要:在探究PowerPoint VBA绘图方法的基础上,剖析如何利用VBA编程在PPT课件中直接绘制各类可控参数的静态和动态平面函数曲线,并给出了具体的制作实例。

关键词:VBA编程;静态曲线;动态曲线;绘制;PPT课件

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)25-6232-03

Dynamically Mapping Various Function Curve in PPT Courseware

MA Zhi-ming

(College of Computer Science and Technology, Xinjiang Normal University, Urumqi 830054, China)

Abstract: After studding PowerPoint VBA mapping method, it has been analyzed that how to mapping Various static and dynamic function curve by using VBA programming in PPT courseware. An example has been given also.

Key words: VBA programming; static function curve; dynamic function curve; mapping; PPT courseware

PowerPoint由于简单易用等优点成为众多教师制作课件的首选工具,它所附带的编程工具VBA则给使用者提供了对演示文稿进行二次开发的环境,从而使演示文稿的功能更加强大。函数曲线的绘制在数学、物理、电子等学科的课件中经常出现,特别是可控参数的交互式静态函数曲线和动态函数曲线的绘制更是体现课件制作水平高低的要素之一。笔者经过反复探究找到了在PowerPoint中利用VBA编程制作这类课件的有效途径,现将其关键技术介绍如下,希望能对各位同仁有所启发。

1 VBA概述

在Office家族中集成了一种加强其功能的语言,即Visual Basic for Application,简称为VBA。VBA是Visual Basic程序设计语言(简称为VB)的一个子集,继承了VB的绝大多数功能,并包含了对Office中有关对象的支持与操作功能,因此,易于掌握并用于宏编程。在PowerPoint中利用VBA可以在幻灯片中添加控件等用户接口元素,通过这些控件应用程序可以得到用户的请求,并对其做出响应。在PPT中适当地使用VBA,可以大大增强其交互功能,为加强教学课件的演示效果开辟了广阔的空间。

尽管VBA是VB的一个子集,具有与VB相近的开发环境,但在应用中与VB还是有一定的差异。VB是独立的应用程序开发工具,用其开发的应用程序可以独立运行;而VBA是嵌入Office的宏开发工具,用其开发的宏程序采用解释方式执行,而且宏程序是Office演示文稿的组成部分,必须在Office的支持下才能运行。

跟VB类似,VBA也是面向对象的程序设计语言,采用的也是事件驱动的编程机制。因此,宏的编制与VB编程一样也是从对象的定义开始的。不过与VB的通用对象不同,Powerpoint中除Applicaton对象外其它对象均未定义事件,无法驱动宏。因此,除了Application对象,可以产生宏驱动事件的对象仅限于VBA所支持的诸如命令按钮等VB通用控件对象,这些对象均包含在“控件工具箱”工具栏。在幻灯片中添加所需的控件对象,右击对象可设置其属性,双击对象可打开VBA开发环境进行编程,其间的操作与VB基本相同。

2 在PPT中动态绘制函数曲线的关键环节

2.1 PowerPoint中的绘图方法

PowerPoint中的绘图方法非常有限,只提供了两种绘制直线的方法:

2.1.1 使用Shapes集合对象的AddLine方法

其格式为:Shapes.AddLineBeginX,BeginY,EndX,EndY

其中,BeginX、BeginY和EndX、EndY分别是直线两个瑞点的坐标。用这种方法所绘制的直线是一个Shapes对象,就跟手工绘制的直线一样在幻灯片中一直存在;如需交互式绘制,则必须使用其它函数将这个对象删除,故不适于交互式函数图形的绘制。

2.1.2 使用SlideShowView对象的DrawLine方法

其格式为:SlideShowWindows(1).View.DrawLineBeginX,BeginY,EndX,EndY

参数的作用跟上面相同。DrawLine方法实际上是模拟幻灯片中的绘图笔来进行绘图,因此绘制的图形只是在幻灯片上进行显示而没有在幻灯片中形成Shapes对象,不须另行处理,在幻灯片进行切换后就不会再显示该图形,如果需要还可以用EraseDrawing方法将所绘制的图形清除;此外,所绘图线的颜色可以用PointerColor属性进行灵活设置。因此,用这种方法最适合绘制交互式静态、动态函数曲线。

2.2 PowerPoint中绘制函数曲线的基本思想

用上述方法所绘制的图线均为直线。若要绘制函数曲线必须采用折线逼近的思想,即将曲线细分成若干小段,每一小段用直线代替,当所分的小段足够小(小到屏幕坐标的最小单位)就可以使所绘制的折线非常接近于曲线,幻灯片放映时完全可以达到以假乱真的效果。

具体做法是:根据函数曲线的具体形式(直角坐标或极坐标形式均可)及参数的变化范围,计算出有关绘图点的坐标值分别存放在x和y两个数组中;最后通过一个循环,用DrawLine方法将有关端点用直线连接起来即可。但在计算坐标值时必须控制好绘图范围,在幻灯片中绘图时屏幕的宽和高分别是720和540,因函数形式的不同,其峰值有可能因太大而无法在幻灯片中完整显示其曲线,也可能因太小而无法在幻灯片中充分展示其变化过程。因此必须用一个缩放系数k来控制曲线的范围,其算法为:k≤屏幕坐标的最大值÷函数的最大值。例如,若绘制的曲线是y=Sin(x),则k≤270/1,即k≤270,一般情况下,让k的取值在150~200之间都比较合适。

2.3 动态绘制函数曲线时的时间控制

动态效果的实现离不开定时器控件,但VBA不支持该控件,这对实现动态效果极为不利。虽然Win32API中的定时器函数SetTimer()与KillTimer()可以弥补这一缺陷,但使用起来非常麻烦,需要在标准模块中声明这两个繁琐的API函数,并编写相应的定时器事件处理子程序。

通过探索和实践,笔者找到了解决该问题的一个巧妙方法:利用VBA自带的Timer函数,此函数返回的是一个时刻值(从子夜开始的秒数),测出两个时刻即可得之间的秒数;在代码中用一个闲置循环进行等待,等到设定的时间后再执行后续代码。如要延时0.001秒,就可用以下程序段:

t1 = Timer

While Timer - t1 < 0.001:DoEvents:Wend

在循环中用DoEvents语句可随时将控制权交给系统,以顾及其它任务或请求。在上面介绍的绘制函数曲线的循环中,每绘制出一条线段就用上述方法延迟一段时间,从而可以绘制出动态函数曲线,效果非常出色。

3 制作实例

下面以利萨如图为例,介绍在PowerPoint中绘制静态和动态函数曲线的过程。

利萨如图是x=sin(n1α)、y=sin(n2α+θ) 极坐标方程所对应的函数曲线,本课件可由用户通过文本框输入n1、n2和θ的值,单击相应绘图按钮可静态或动态地绘制出对应的曲线,根据需要还可将参数不同的多条曲线绘制在同一个幻灯片中,便于对比。

3.1 添加对象

1) 启动PowerPoint,建立一张空白幻灯片,通过“视图/工具栏”菜单打开“控件工具箱”。

2) 选中“控件工具箱”中的“命令按钮”控件,在幻灯片左下方画出3个按钮,并将Caption属性依次设置成“静态绘图”、“动态绘图”和“清除”。

3) 通过“插入/文本框”菜单在幻灯片的右上方添加3个水平文本框,将内容分别设置成“n1=”、“n2=”和“θ=”。在“=”号右边通过“控件工具箱”添加3个文本框控件,分别用于输入n1、n2和θ的值。

4) 以幻灯片中心为原点,用绘图工具栏中的“箭头”绘制一个迪卡尔坐标系。

3.2 编写宏代码

双击幻灯片中某一按钮进入宏编辑窗口,并输入以下代码:

Private Sub Draw(Delay As Boolean) '绘图通用过程

Dim x(630) As Single, y(630) As Single

n1 = Val(TextBox1.Text) : n2 = Val(TextBox2.Text) : s = Val(TextBox3.Text) * 3.1416 / 180'读取参数

For a = 0 To 6.29 Step 0.01 '计算坐标值,并将坐标原点由左上角变换到屏幕中心,即(360,270)

x(a * 100) = 360 + 160 * Sin(n1 * a) : y(a * 100) = 270 - 160 *Sin(n2 * a + s)

Next a

SlideShowWindows(1).View.PointerColor = 256 ^ 3 * Rnd '随机颜色

For i = 0 To 628 '绘图

SlideShowWindows(1).View.DrawLine x(i), y(i), x(i + 1), y(i + 1)

If Delay Then '如果动态绘制则延时

t1 = Timer

While Timer - t1 < 0.001: DoEvents: Wend

End If

Next i

End Sub

Private Sub CommandButton1_Click() '静态绘图

Call Draw(False)

End Sub

Private Sub CommandButton2_Click() '动态绘图

Call Draw(True)

End Sub

Private Sub CommandButton3_Click() '清除图形

SlideShowWindows(1).View.EraseDrawing

End Sub

3.3 运行

放映幻灯片后,单击“静态绘图”按钮即可看到一次绘出的利萨如图曲线,单击“动态绘图”按钮则可看到利萨如图曲线的动态绘制过程,而且每单击一次曲线的颜色就随机变换一次。通过文本框改变相应的参数后,单击有关绘图按钮就可绘出不同的曲线;单击“清除”按钮就可将所绘图形清除。

需要说明的是,为了防范宏病毒对计算机的侵害,在PowerPoint的“工具”菜单中对宏的安全性设置了不同的安全级,只有将安全级设置成“低”或“中”,重新打开相应的演示文稿,并在系统提示的“安全警告”对话框中选择“启用宏”(当安全级设置成“中”时会出现此对话框),这样才能在幻灯片放映时启动宏程序,看到宏代码执行时的相应效果。

4 结束语

本文给出的实例是极坐标函数曲线,对于直角坐标函数曲线,其算法基本相同,只是计算绘图点的坐标值时y是x的函数而已。另外,若能充分发挥PowerPoint自身的优势和VBA的功能,课件制作时就会如虎添翼,其交互性和演示效果毫不逊色于专业软件开发工具制作的课件。

参考文献:

[1] 程智.利用VBA来提高PowerPoint制作的课件的交互性[J].中国电化教育,2002(6).

[2] 颜清.PowerPoint课件中基于VBA的习题设计[J].计算机与现代化,2006(2).

[3] 杨密.VBA从入门到精通[M].北京:电子工业出版社,2008.

[4] 马致明.在PowerPoint中利用VBA制作交互式物理模拟课件[J].中国教育信息化,2008(8).

上一篇:高职《办公自动化》课程项目化教学体系的构建... 下一篇:基于GT4的网格服务开发