利用Authorware动态绘制二次函数曲线图

4/8/2006来源:Authorware教程人气:11640

在中学的数学中,二次函数是最常用的函数,标准式Y=ax*x+bx+c(a<>0),它的图像是以一条直线x=-[b/(2a)]作为对称轴,点{-[b/(2a)],(4ac-b*b)/4a}为顶点的抛物线,如果a>0,那么抛物线开口向上,如果a<0,抛物线向下张开。针对函数性质,现在利用Authorware动态绘制出它的曲线图。(执行界面如插图1所示)

Authorware具有强大的多媒体处理功能,5.1版本的数学函数有二十多个,但没有直接处理二次函数的系统函数,我们可以利用其他的方法绘制出二次曲线,下面就用实际例子去解决这问题。(插图2为第一层的流程线)

先打开Authorware 5.1,新建一文件,取名为“二次函数”。先建立一个计算图标Setwindows,它的内部数据如插图3所示。

ResizeWindow(640, 480)是设置执行窗口的大小,我们选取普通640*480的显示模式。a:=1;b:=0;c:=0是设定二次函数3个系数的初始值。

第二个计算图标(如插图4所示),它主要是设置本软件的背景图。这个计算图标的意图主要是将整个展示窗口分为3个区域,左上区是绘图区,右上区是说明、提示、帮助区,下半部份是输入数值区。ShowTitleBar(Off/On)是隐藏或者展示窗口中的用户菜单,ShowMenuBar(Off/On)--隐藏或展示窗口中的用户标题栏,这里都选取隐藏。这里重复利用了多个绘图函数,函数SetFill(flag [, color])用于设置使用绘图函数时是否填充,并可以设置填充的颜色。Flag 是真,填充;是假,不填充(真可以用1、True、Y等代替,假可以用0、False、N等代替),用RGB函数计算颜色color。RGB(R,G,B)组合R(红色),G(绿色)和B(蓝色)值进入单一的颜色值。每个组成数字介于0和255。如何设定这3个数字呢?其实很简单,你可以利用Windows所带的画笔或者其他的一些绘画软件,在编辑颜色时,选定你需要的颜色,旁边辅助工具显示出那种颜色的RGB数值。SetFill(flag [, color])用于设置使用绘图函数时是否填充,并可以设置填充的颜色。Flag是真,填充;是假,不填充,用 RGB 函数计算颜色color。SetFrame(flag [, color])用于设置使用绘图函数时是否含有边框,并可以设置边框的颜色。Box(pensize, x1, y1, x2, y2)是根据提供的两点坐标(x1,y1)和(x2,y2)画一个矩形,边框的线宽为pensize。画出的矩形边线是黑色里面是白色,除非用SetFrame和SetFill改变。Line(pensize, x1, y1, x2, y2)根据提供的两点坐标(x1,y1)和(x2,y2)使用线宽pensize画一条直线。直线的颜色是黑色,除非在SetFrame 函数中设定可以改变。SetLine(type)用于设置直线的形状:0=无箭头,1=开始有箭头,2=结束有箭头, 3=两端有箭头。这里画XoY坐标时,选择2。对照插图4,我们就可以做出插图1所显示的背景图。这里的表格、坐标等都是单纯用作图函数直接画出,相比用Authorware的作图工具更具有灵活性、准确性、高效性。需要注意的是,由于设定的内容比较多,而这些设定会相互影响,一定要小心,并且要多测试,防止出现漏洞。

插图1的About交互图标采用了按键交互,一个是帮助,用来说明使用软件注意问题等内容,一个是退出程序。里面用到了2个系统函数,Restart()和Quit()。Restart()从文件的初始状态执行,重新运行时所有变量都被初始化,Restart只能用于计算图标,没有任何参数。Quit(option)是退出文件函数,其中0代表离开程序管理器或如果从另一个文件转入则返回文件;1设定退出程序管理器;参数2是重新启动Windows(在 Wind 3.1 中退到 DOS);3是关闭电脑(在Win3.1不能使用)。

屏幕下半部份是用于输入3个系数a、b、c,使用变量直接显示输入的a、b、c的输入值,将这显示图标的PRoperties(属性)设定为Update Displayed Variables(自动更新显示变量)和Prevent Automatic Erase(防止自动擦除),目的是为了让每次的输入数据可以马上同步出现,并且一直在显示。

在intup_abc群组图标里面,是3个交互图标和6个计算图标(如插图5所示),3个交互图标采用Text Entry(文本输入),用于输入曲线的3个系数abc。

在交互图标属性里面有个Text Field(文本区域),在Layout(版面设计)中可以设置Auto-Entry at Limit(在界限处自动登录),在Character Limit(字符界限)中设定5个就自动登录进去,在Interaction交互属性中选定Ignore Null Entries(忽略空输入),避免没输入字符就继续运行,在Text Mode(文本模式)中选择Transparent(透明),使输入内容和背景和谐。为了可以输入文本,在交互图标下的计算图标设置a:=NumEntry,变量NumEntry表示用户在文本交互中所输入的数字,参数b、c设置方法是相同的。在每个交互图标下都有一个计算图标(如插图6所示)进行输入数值判断,因为坐标的长度有限,我们绘制的二次函数曲线是一个压缩的图标,所以要限制输入的3个参数的取值范围,经过考虑实际情况和尝试,决定a、b限制在正负100,C限制在正负120之间,所以计算图标中加条件语句If...Then...,目的就是限制输入数值,如果超过了设定值,就返回继续输入,直到符合限制要求。

因为二次函数要求二次系数a不能为零,所以在输入数据后,流程线上还加上一个判断if a=0 then GoTo([email protected]"000"),当a=0时,转到执行图标ID为“000”处(插图7),它的作用就是显示输入数据出错,重新输入数值。

输入了数据之后,利用Authorware的系统函数来绘制二次曲线。在主流程线上Show交互图标下有2个群组a>0和a<0,里面的内容样式是一样的(见插图8)。在绘制图形之前,有个判断(插图9),h:=b/a/2;if ABS(h)>23 then GoTo ([email protected]"overflow")这里的意思其实就是限制图形要在绘图区内,和前面同样的道理,由于坐标长度限制,当h过大提示重新输入系数a、b(主要是Abs(b/a)>46时进行限制,因为这时图形已经开始超出绘图区),图标ID“overflow”的部分,就是提示出错和重新返回输入系数数值。

整个课件的灵魂在计算图标“Draw”里面(见插图10),这里的repeat with i:= -240 to 240 就是让变量i从-240到240进行全部取值,这个数量段的取值是不定的,一般和显示图形的窗口大小相关,基本上与绘图区像素的点数相近为宜(如现在的绘图区的像素是640*480)。语句y:=-((((a*i*i)/(480*(ABS(a))))+((b)*i/(480*ABS(b+0.001)))))-(c)就是绘制二次函数曲线图形,它分3部分,分别对应函数的二次、一次、常数项,因为Authorware屏幕的坐标和XOY的坐标不同,这里进行了坐标转换,需要一定的数学知识(几何坐标系的转换),不能直接套用二次函数一般式,需要用/(480*(ABS(a)))和/(480*ABS(b+0.001))这两部分参数来修正二次函数图像在屏幕上的显示,使到图像和实际情况相吻合。由于二次系数和一次系数对坐标位置的影响不同,很明显在同等情况下二次系数对图形的影响比一次的要大,这2个参数也就不同。特别注意前面的负号,因为计算机的坐标是以左上角为(0,0)向右、下递增坐标数值,实际XOY坐标系是X坐标值向右递增,Y坐标值向上递增,所以X坐标值递增方向与计算机屏幕坐标值递增方向相同,Y坐标值递增方向与计算机屏幕坐标值递增方向相反,结合坐标转换就得出这语句前面加负号,使到计算机屏幕显示Y坐标轴的方向与实际相符。常数c与坐标转换没关系,它只影响图形的上下位置,前一个的负号与c无关;因为计算机Y轴的递增方向是向下,c前面加负号使到Y轴递增方向向上,与实际C值的增减相同。在语句x:=i/((6+ABS(a)*(1/6)+((b)*(1/6))/(SQRT(ABS(b+0.001)))))中,6、1/6、0.001等参数主要是修正曲线张开角度之用,它们对抛物线的伸张影响程度不同而有不同的参数,这些参数,在数学知识基础上,结合实际情况而得出的。语句Line(1,x+240-(b/a/2)*10,y+180,x+240-(b/a/2)*10,y+180)中,x+240和y+180用于确定XOY坐标系的原点在绘图区的位置,通过用线当点(像素为1其实就是一点)来绘制二次函数曲线,因为i在一定范围取值,每次取值就可以画出二次曲线的一个点,所有的坐标取值变化就得出二次函数曲线。语句Line(1,240-(b/a/2)*10,8,240-(b/a/2)*10,352)是用来绘制曲线的对称轴X=-b/(2a)。这部份的辅助参数要进行多次尝试,结合实际情况确定。

在制作课件的时候,要注意充分考虑到使用时出现的各种情况。这课件是通过人工输入二次函数的3个系数来绘图,由于输入的情况是很复杂的,当输入的数值太大时,由于屏幕显示坐标的限制,可能会出现见不着图形等情况,考虑到这点,采用限制输入数值的方法,系数a、b限制在正负100之内,c限制在正负120之内,这样,既有一定的普遍性,又减少产生误差的可能性。由于a不能等于0,当输入为零时,通过调用群组“000”来进行说明a不能为零。二次曲线的对称轴X=-b/(2a),当abs(b/a)>46时,图形超出了屏幕显示范围,同样用计算图标h:=b/a/2;if ABS(h)>23 then GoTo ([email protected]"overflow")调用Overflow群组说明。输入的数值是字母或者其他非阿拉伯数字时,Authorware的系统字符函数Char、Code不能处理字符变量(因为输入的数字是变量),不能象其他编程语言一样通过考虑字符的Ascii码来进行判断,不能过滤非数字变量,而Authorware只将其他字符当为1或0处理(单独时其他字符为0,有数字混合时为1)。这说明了制作软件时,要充分考虑使用时出现的各种情况,要采取一定的纠错处理。

以上说明,在Windows98+Authorware5.1上通过,并将源程序放在http://www.5dmedia.com/上面。

下载2次函数源程序