动态演示程序

2024-12-11

动态演示程序(通用8篇)

动态演示程序 篇1

1 引言

排序是计算机程序设计中一项基本的操作, 在实际应用中, 有很多情况下需要对数据按照某种方式进行排序后才能达到某种要求, 因此, 学习和研究各种排序方法是计算机工作者的重要课题之一。

比较成熟的排序算法有很多, 比如冒泡排序、选择排序、插入排序、快速排序等, 利用这些排序算法都能够使一组数据序列按照某个关键字排成需要的顺序。但这些经典的排序算法在对数据序列排序时, 都要改变数据的原始顺序。也就是说, 在一般情况下, 排序问题的输入是n个数a1, a2, a3, ……, an的一个序列, 排序是按照某个关键字对初始序列重新排序, 产生初始输入序列一个重新排列:a11, a21, a31, ……, an1, 使得a11

2 按学生成绩排名次的算法

假设要处理的数据存放在A数组中, 为了算法实现的需要, 定义A数组为A[2][n], 其中A[0][0..n-1]存放需要确定名次的数据, A[1][0..n-1]存放排序后各数据对应的名次, A[2][0..n-1]为标志, 指示该数据的名次是否已经确定。首先假定所有数据的名次都是1, 然后利用冒泡的思想一一确定每个数据对应的名次, 即从第i个数据开始与其后的第j (j=i+1, i+2, ......, n-1) 个数据进行一一比较, 若当前数据A[0][i]>A[0][j], 则第j个数据对应的名次加1, 若当前数据A[0][i]

下面给出具体的算法描述:

输入:输入数组A[0..2][0..n-1], 其中A[0][0..n-1中书需要排序的数据, A[1][0..n-1]为排序后各数据对应的名次A[2][0..n-1]中为名次是否确定的标志。

输出:确定了名次的数组A[0..1][0..n-1]

3 动态演示程序

在.NET开发环境中生成一个Windows应用程序, 在窗体的界面上放置一个面板控件Panel, 作为展示动态排序过程的窗口, 添加3个Timer控件, 适当设置Timer控件的Interval属性, 分别用来代替算法中的3个循环, 达到动态演示的效果。程序中的关键代码如下:

4 界面效果

该程序运行的界面效果如图1所示, 已经确定好的名次和还没有确定的名以不同的颜色进行了区分, 非常直观。

5 结语

给出按成绩进行排名次的算法并利用C#语言编程实现了该算法的动态演示, 对于一些特定的问题, 原有的经典算法不一定适合, 在遇到某些特定问题时, 可以根据具体问题进行具体分析, 在一些成熟算法的基础上针对具体问题进行思考, 可能会出现一些最初没有想到的效果。

摘要:实际应用中经常需要按照成绩进行排名次, 在排名次时, 很多情况下都要求确定数据对应的名次, 但又不要求改变数据的原始顺序。采用冒泡排序的基本思想, 给出了一个数据次序不变确定名次的有效算法, 并利用C#语言编程对该算法的实现进行了动态演示。

关键词:名次,排序,冒泡,Timer控件

参考文献

[1]谭浩强.C语言程序设计.北京:清华大学出版社, 2000.

[2]严蔚敏, 吴伟民.数据结构 (C语言版) [M].北京:清华大学出版社, 1997.

[3]M.H.Alsuwaiyel著, 吴伟, 方世昌, 等译.算法设计技巧与分析.北京:电子工业出版社, 2004.

[4]尹立宏.Visual C#.NET应用编程150例[M].北京:电子工业出版社, 2003.

[5]林邦杰.深入浅出C#程序设计[M].北京:中国铁道出版社, 2005.

动态演示程序 篇2

【关键词】 EXCEL 物理 数据处理

【中图分类号】 G633.7 【文献标识码】 A 【文章编号】 1992-7711(2016)02-029-010

物理尤其是高中物理很大一部分内容研究的是一个物理量与其它物理量之间的量的关系,而且常见的问题都存在着函数表达式,要研究出这些量与量之间的关系,我们借助了许多计算机语言来解决,如:C语言、C++,Mathematics、Matlab等,但这些需要一定的编程基础。随着信息技术的发展,一般的学生包括高中生也已经非常熟悉Microsoft office软件,尤其是它包含的Word、Excel、PowerPoint三个文件。Excel2007是我们常用的一个功能强大的电子表格,可以帮我们处理数据,画出图像,以前也有很多文章介绍利用Excel来画出物理图像来解决问题,但介绍画动态图的较少。本文就利用Excel画静态图和动态图作比较来探讨Excel在物理中的应用。

1.利用Excel处理静态图

利用Excel的强大的图形处理,比其它的处理图像的软件都来得比较简单,这里我们作为研究的例子,来画出具有一定初速度为12m/s的竖直上抛运动的位移——时间图,重力加速度取9.8m/s2,下面我们利用excel的数据填充功能在Excel表格中填入竖直上抛运动的位移值:

分析与操作步骤:

首先,在打开的工作表的第一、二列输入数据,A1单元格输入时间(秒),A2、A3两单元格分别输入0、0.1,然后选择B1、C1,按住右下角的句柄往下拖直到A20,即获得19个时间数据,间隔为0.15s;B1单元格输入位移(米),B2单元格输入“=12*A2-0.5*9.8*(A2)^2”后回车,然后往下拖动填充句柄直到B20.数据填充完毕。

选中第一、二列,选择“插入→图表→散点图→带平滑线的散点图→完成”,再适当单击图像在图表工具中单击布局,在标签中坐标轴、图表标题、图例并进行格式化设置,作出的散点图如图1。

通过此图我们很容易获得对竖直上抛运动的特点,如到达最高位置的时间和回到原位置的时间等,加深了对物理概念及过程的理解。

2. 利用Excel处理动态图

静态图能反映所研究的问题,但是如果我们想改变条件,来比较图像的变化,对于静态图就不适合了,这里我们采用Excel的控件功能,设置滚动条控件来控制需要变化的量的值,通过设置滚动条的单元格链接,随着值的变化,Excel表格中的数据也会跟着变化,同时带动了图的变化。下面我们任然用竖直上抛运动来说明,通过改变初速度和加速度来改变图像。

分析与操作步骤:

首先,按照做静态图一样先做好时间、位移列数据,C1输入初速度(,m/s)、D1输入加速度(,m/s2)再建立两个控制初速度和加速度的控件:点击Excel的左上角的Office按钮,在右下角点击Excel选项,勾选“开发工具”选项卡,再在菜单栏上点击开发工具→控件/插入→滚动条(窗体控件),待鼠标变成“+”形时,在空白编辑区画出初速度滚动条,设置滚动条的格式:右击滚动条→设置控件格式→控制,当前值设为12,最小值设为0,最大值为20,步长为1,单元格链接设为$C$2点确定。对于建立加速度滚动条控件一样,为了得到负加速度,将单元格链接设为$E$2,然后,在D2单元格中输入“=$E$2-10”,使得加速度可以从-10m/s2到10m/s2之间变化。

同建立静态图一样建立作出的散点图,便于调节,并将滚动条拖放到图像区域,这样一个动态的图就建好了,只要拖动滚动条,图像就会随着不同的初速度和不同的加速度而变化。

3.结论

通过演示,动态图像要比静态图理解问题更方便,更直接,而且,现在的基础教育改革要求大力推进信息技术在教学过程中的普遍应用,利用信息技术来画出原来不好处理的图像教学,不能演示的实验也可以模拟出来,也可以利用Excel的数据处理进行函数拟合,得出通过实验得到的数据的函数表达式,深化物理问题的理解。

[ 参 考 文 献 ]

[1] 蒋加伏,沈岳.大学计算机[M].北京邮电大学出版社,2013(4版).

[2] 李传国,余雯,丁浩等. EXCEL在物理实验数据处理中的应用一例[J].物理通报,2015(12).

[3] 李佐印. Excel在高中物理教学中的应用[J].物理通报,2009(1):62-63.

[4] 徐清洪.Microsoft Excel软件辅助物理实验教学[J].物理通报,2012(6):89-91.

[5] 仇明.Excel在物理学作图中的应用[J].中学物理教学参考,2003(3).

按位拆分排序算法的动态演示程序 篇3

排序是计算机科学中最重要的研究问题之一[1]。其基本的排序问题是重排一个给定的数据项集,使它按递增(或递减)排列,数据项可以是具有线性顺序的任意对象[2]。传统的排序算法如冒泡排序算法、选择排序算法等,其运算效率不高,且其数据对象的适应范围受到限制[2]。近年来,许多专家学者提出了一些高效的排序算法[1,2,3,4,5]如SIS[1]、Byte-快速排序[3]、基于统计的排序[4]、比特位拆分索引排序算法[5]等。按位拆分快速排序算法作为目前最好的快速排序算法之一,其算法的思想和实现常常难以理解。设计一个好的动态演示过程,对人们快速理解按位拆分排序算法的运行很有帮助。

2 按位拆分排序算法

按位拆分的快速排序算法是首先根据数据中的比特对数据进行划分整理,将待排序列的每个数拆分成m个k位。然后按照数据由高到低每次截取k位的顺序,将待排序列分成个子序列,高k位相同的数据安排在同一个子序列中,各子序列的数据遵循段间有序、段内无序的规则。然后对各子序列的数据分别进行判断,如果排序结果有重复且还未到最底k位,则再对次高k位组成的子序列进行排序,持续上述的排序整理工作,直到排序结果无重复或子序列排序结束时,排序工作结束。整个排序的过程就是一个递归的排序过程。

用C++实现的按位拆分排序主要代码如下:

3 演示程序界面与控件

3.1 运行界面

程序运行时的界面如图1所示。

由于系统统计排序时间时采用的多线程,而动态演示时不能使用多线程,因为必需按顺序排列,所以动态演示时排序均在一个线程里面完成。因此程序里面有两个排序的函数,MultiThreadSort用于实际排序的时间统计,SingleThreadSort则用于动态演示时的排序演示。

在SingleThreadSort中,创建独立于界面线程的一个线程,采用异步通信方式与界面线程进行通信,将排序中的每一个步骤发送给界面线程,并且每个步骤完成时中间设置一个暂停的时间,以便用户可以观察到排序的每个过程,然后界面线程根据数据显示当前排序状态。

3.2 数据控件

选择数据格式控件使用的是CComboBox控件,如图2所示,用户可对排序的3种数据类型进行选择。选择数据数目控件使用的是CEdit控件和CSpinButtonCtrl控件的组合,如图3所示,用户可直接输入待排序数据的数目,也可以使用上下箭头进行数据的加减。

接下来选择数据数目4个控件使用的是CButton控件,如图4所示。

点击生成数据控件后生成待排序的原始数据,并且显示在原始数据表中,其生成数据采用的是随机生成法。点击重置控件后清空当前的所有数据。点击开始排序控件后即对当前产生的数据进行排序,此时将出现如图5所示的对话框。

此排序时间是使用MultiThreadSort进行排序得到的结果(即多线程排序),此时点击“是(Y)”按钮即可进行动态演示过程。如图6所示,使用的是CComboBox控件,显示的是待排序数据的每个字节上的二进制值,且将原数据显示在右边的中间过程及结果框里面。当所有数据全部排列完毕,此时将出现如下对话框,如图7所示。

点击确定后,即开始在右边的中间过程及结果框里面归并所有数据的排列结果,如图8所示。

此时使用的是CListBox控件,左边的用来显示点击生成数据后的原始数据。右边的用来显示排序过程中的中间结果及排序完成后归并的最终结果。最后,点击退出控件,将退出整个演示程序。

4 动态演示程序

动态演示程序的主要代码如下:

5 结语

在介绍按位拆分排序算法的基础上,采用C++编写了该算法的动态演示程序,并着重讲述了演示程序界面的控件功能和演示程序的工作原理。该演示程序图形用户界面十分直观、形象,有助于初学程序设计者更好地理解算法思想和具体实现过程,在实际的教学中收到了良好的效果。

摘要:按位拆分排序是一种新的排序算法。为了使学生更好地理解算法思想,利用C++功能强大的图形界面功能,设计实现了按位拆分排序算法的动态演示程序,其图形用户界面十分直观形象,有助于初学编程者更好地理解这一排序算法的原理和具体的实现过程。

关键词:按位拆分排序,动态演示程序,图形用户界面

参考文献

[1]Yingxu Wang.A New Sort Algorithm:Self-Indexed Sort[J].Communications of ACM SIGPALN,1996:28-36.

[2]霍红卫,许进.快速排序算法研究[J].微电子学与计算机,2002,6:6-9.

[3]朱红,陈清华,刘国发.一种Byte-快速排序算法研究[J].计算机工程,2002,28(12):39-57.

[4]马占欣,凌凤彩.一种基于统计的排序算法[J].小型微型计算机系统,2002,23(11):1403-1405.

[5]黄兴.比特位拆分索引排序算法研究[D].北京:清华大学,2007.

动态演示程序 篇4

飞机燃油电气系统是由机电管理计算机、燃油转换盒、机电参数显示器和燃油控制盒以及传感器、电磁阀、转输泵等组成,可以实现燃油油箱低油面和高油面的告警,完成压力加油和抽油操作控制,解算并显示燃油油量,实现油箱之间的油量转输等功能[1,2]。为了将某型飞机机电管理系统对燃油系统的管理控制结果形象具体的展示出来,便于学员理解燃油系统的工作模式,提升教学效果,因此设计了燃油系统动态演示装置。

2 总体方案设计

2.1 燃油系统组成

燃油电气系统相互之间的关系如图1所示。燃油系统主要功能包括飞机的压力加油/抽油,燃油的相互转输。

飞机共有8个燃油油箱,分成前、中、后三组,每组油箱给一台发动机供油,其中中组油箱又分为中组前和中组后两个油箱。每组飞机油箱中都安装有燃油油量传感器、油面传感器、燃油温度传感器三种传感器,其中油面有高油面传感器和低油面传感器两种。

2.2 燃油系统模拟器功能

燃油系统模拟器能接收加/抽指令以及转输指令信号和反馈燃油系统各电磁阀的状态信号,并能显示出三组油箱的油量信号,然后模拟显示燃油电气系统的工作情况,功能结构如图2所示。

通过人工操作面板的控制开关,实现加油、抽油、油量转输的控制,燃油电气系统模拟器具体功能如下:

1)能接收加抽油指令和转输油指令;

2)应当能够模拟三个油箱内的三个高油面和三个低油面的功能;当模拟油箱内的油面达到高油面时,应当提供一个信号;当模拟油箱内的油面达到低油面时,应当提供一个信号;

3)应当能够模拟油箱内燃油油量的多少;

4)在接收到加/抽油指令、转输指令后,能够模拟出各个油箱间油路的工作情况,并实时显示出各油箱内油面的变化情况;

5)能够显示加抽油电磁阀、转输电磁阀和转输泵的工作情况。

实现上述功能,模拟器主要由显示面板、控制面板和处理器组成。

3 硬件电路设计

硬件电路的设计是实现效果显示和控制功能的表现方式和前提条件,只有硬件电路的设计足够完善,才有完成预计功能的机会。硬件设计主要分为单片机最小系统、控制电路设计和显示电路设计,以及PCB电路板制作,相应的结构图如图3所示。

3.1 单片机最小系统

单片机最小系统是指用最少的元件组成的单片机可以工作的系统[3],通过对端口数量及处理速度等需求进行分析,本系统选用以Microchip公司生产的PIC18F4520单片机作为核心处理器的最小系统。

3.2 控制电路设计

3.2.1 三极管驱动电路

在自动控制电路中,常使用半导体三极管作为电子开关来驱动控制发光二极管、蜂鸣器、电动机、继电器等器件的工作状态。利用三极管的开关特性,经单片机I/O端口控制来驱动LED灯。

3.2.2 4线-16线译码器

由于系统需要控制的二极管较多,单片机自带的I/O口不能满足要求,需要对I/O口进行扩展[4]。本文选择4线-16线译码器74LS154,可以将4个输入的二进制编码译成16个彼此独立的输出信号[5]。

利用两片74LS154译码器,其选通输入端都接地,第一片的4线输入端接PIC单片机的RD4—RD7端口,16线输出端则定义为端口X0—X15;第二片的4线输入端接PIC单片机的RD0—RD3端口,16线输出端则定义为端口Y0—Y15,如图4所示。这样便将单片机的8个I/O端口扩展为了32条控制线,虽然不能同时控制全部,但在分时控制下也相当于同时控制32个端口。

3.2.3 矩阵键盘

为了减少单片机I/O口的占用,将按键设计排列成矩阵形式[6],如图5所示。

按键所对应的控制面板上的开关分别为:S1(JQ)——中组油箱加油开关,S2(JZ)——中组油箱加油开关,S3(JH)——后组油箱加油开关,S4(CQ)——前组油箱抽油开关,S5(CZ)——中组油箱抽油开关,S6(CH)——后组油箱抽油开关,S7(ZSQ)——前组油箱转输开关,S8(ZSZQ)——中组油箱中前转输开关,S9(ZS⁃ZH)——中组油箱中后转输开关,S10(ZSH)——后组油箱转输开关,S11(BZ)——转输泵正转,S12(BF)——转输泵反转。

3.4 显示电路

系统所有的显示功能利用LED来实现,具体方式如下:

1)油箱的轮廓及管路采用线条的方式进行描述;

2)油箱内油面的高低采用LED灯的亮暗指示;

3)每个油箱内的高低油面传感器采用LED灯的亮暗指示;

4)加抽油电磁阀、转输泵和转输电磁阀的工作状态采用LED灯的亮暗进行指示;

下面以加/抽油管路为例来说明实现方式。

加/抽油管路采用LED灯的灯带指示,并分为加抽油公共管路LED灯带、前组油箱管路LED灯带、中后组公共管路LED灯带、中组油箱管路LED灯带和后组油箱管路LED灯带五个部分,如图6所示。

公共管路LED灯带在每个油箱加抽油时均要工作,因此应当是一直燃亮的;中后组公共管路LLEEDD灯带则在中组和后组至少有一个工作时燃亮;前组油箱管路LLEEDD灯带、中组油箱管路LLEEDD灯带、后组油箱管路LLEEDD灯带只是在该油箱加//抽油时工作,因此,油箱管路的指示灯应当与该油箱的加//抽油电磁阀一起工作。每一路的LLEEDD灯带由几组灯构成,每组灯进行单独的控制,且每组灯最多88个LLEEDD灯。具体的加//抽油路设计原理图如图77所示。

最后通过绘制PCB板及元器件焊接,完成硬件电路的设计制作。

4 软件程序设计

该燃油系统演示装置的程序设计主要分为控制开关的程序设计、显示界面的程序设计和程序调试等,用C语言作为编程语言,集成开发环境使用MPLAB IDE,单片机程序的烧写采用PICkit 3编程器/调试器。程序设计结构图如图8所示。

5 结论

本设计采用单片机为中心控制器,实现了在控制开关的操作下,模拟燃油系统加抽油或转输油工作时各油路的工作情况,以及三个油箱液面的显示。在进行设计之前先对飞机燃油电气系统进行了介绍,概述了燃油电气系统的功能和组成情况,详细阐述了燃油系统模拟器的硬件设计过程和程序设计过程。最终完成了硬件电路的调试,如图9所示。

参考文献

[1]李小刚,曹克强,苏新兵,等.高精度超声波式飞机油量传感器设计[J].现代制造工程,2011(11):101-104.

[2]刘君华.智能传感器系统[M].陕西:西安电子科技大学出版社,2009:182-185

[3]孙安青.PIC单片机实用C语言程序设计与典型实例[M].北京:中国电力出版社,2008.

[4]张明峰.PIC单片机入门与实践[Ml.北京航空航天大学出版社,2004

[5]杨军锋,杜军,苏磊,等.滑油压力表信号测量和处理电路设计[J].电子技术应用,2013(2):17-19.

动态演示程序 篇5

目前, 一些学校的教师在讲解机械原理课程时, 利用教学模型、展柜、录像带等形式替代了传统的黑板、挂图等教学工具, 达到了一定的教学效果。但是这仍然存在一些缺陷。一方面, 教学模型、教学展柜等工具, 虽然可以动, 但教师没法一边动, 一边做详尽的分析;另一方面, 由于课时的限制, 机械原理课程中许多基本理论和概念很难在课堂上反复讲解, 课后学生复习时, 因为没有对应的工具, 学习效果会大打折扣。而软件的应用克服了上述的各种问题。

利用绘图软件等制作出一些动态演示课件, 不仅可以控制动画的播放时间, 而且可以实现在任意位置的停留, 以便做进一步的讲解。同时, 将课件拷贝给学生, 学生在复习的时候可以根据自己的兴趣反复演示。通过这样的教学方法可使得教学形象生动, 不仅提高学生的学习兴趣, 也能使学生们加深对所学内容的理解, 提高学习效率。下面具体举两个例子来阐述动态演示教学相对于传统教学的优势。

例如, 在平面四杆机构的演化形式教学中, “通过改变运动副的尺寸得到不同的机构”这部分内容, 由于涉及运动副尺寸的变化, 很难通过挂图、教学模型、教学展柜来体现“变化”这一过程。而通过动态演示的过程 (见图1) , 则可以轻松实现。图中, 通过动态变化的效果, 充分展示出通过改变运动副B的尺寸大小, 实现了由“曲柄滑块机构”向“偏心轮机构”演变的过程。

又如, 介绍“渐开线的形成”的概念中提到:当一直线BK沿圆周做纯滚动时, 直线上任意点K的轨迹AK就是该圆的渐开线。此处如果利用模型, 学生很难看清楚任意点K所扫过的轨迹的过程。采用动态演示的方法 (见图2) , 则可清晰地看到从A—K3—K2—K1—K的演变过程, 从而加深对渐开线的印象。

动态演示教学不仅能提高学生的学习兴趣, 而且可以大大减少教师的板书量。如果在应用过程中能够做到以下这四点, 更可以大大提高整个教学质量。

第一, 增加信息量。传统教学需要大量的板书、绘制准确的图形, 这都需要耗费大量的时间, 难免会减少教师真正的授课时间。通过动态演示教学模式, 可减少上述工作的时间, 这就给教师增加了课堂容量。教师要充分利用这空余出来的时间, 多讲解一些实例, 使学生更容易理解所学的知识。

第二, 增强互动环节。现在许多教师开始注重教学过程中与学生互动的环节, 但有些知识难点往往在整个变化的过程中间 (如上面所提的“通过改变运动副的尺寸得到不同的机构”) , 而传统的教学模式在这里很难达到互动的效果。动态演示的一个优点在于所要演示的动画均能在任意所需的位置做停留。教师应充分利用这一特点在“运动副变大”这一过程中停留, 达到互动的效果。

第三, 增强学生的主观能动性。课堂上展示给学生的是制作完成后的动态演示效果, 有的学生对于制作软件及制作过程较为感兴趣。教学过程中, 可以充分抓住这部分学生的心理, 将有兴趣的同学召集起来, 让其自己制作动画并拿到课堂上讲解。这样做, 一方面可以提高学生的学习效果, 另一方面, 也培养了他们的创新能力和综合素质。

第四, 反复演练。动态演示的另一个优点在于可以反复演练。由于课时的限制, 教师无法在课堂上对某个问题反复进行讲解。这就要求学生课后加强复习。动态演示能够很好地呈现整个课堂的教学过程, 使同学们在复习的时候事半功倍。

随着时代的发展, 课程教学的改革变得不可或缺。动态演示是计算机软件与传统教学的有机结合, 它的引入使得机械原理课程教学更加形象、生动, 极大地提高了学生的学习兴趣, 充分调动了学生的学习积极性。

摘要:本文通过介绍机械原理课程教学中对动态演示的应用和探索, 提出了在机械原理课程教学中引入动态演示教学的一些看法和体会。

关键词:机械原理,动态演示,课程改革

参考文献

动态演示程序 篇6

汉诺塔是一个非常古老而有趣的数学问题, 它由3根柱子和一堆可摆放在不同柱子上的大小不一的盘子组成。最初所有盘子按照尺寸大小顺序地被放置在一根柱子上, 最大的盘子在最下面, 最小的盘子在最上面, 从而形成一个圆锥形状。游戏的结果是将所有的盘子移动到另一根柱子上, 移动过程中的规则是: (1) 每次只能移动一个盘子; (2) 每次将一根柱子上面的盘子移动到另一根柱子的上面, 即只有某根柱子最上面的盘子才可以移动; (3) 大盘子不能放置在小盘子之上[1]。自计算机出现以来, 汉诺塔问题出现了各种各样的解决方法。与此同时, 它在计算机专业课程教育中出现频率也是非常高的。例如, 数据结构中用它来描述递归思想;算法设计与分析中用它的不同解法来展现算法的多样性;高级语言程序设计中用来展示它的动态演示[2,3,4,5,6]。根据程序应用范围和服务对象的不同, 汉诺塔的动态演示也是各有特色的。例如以算法思想描述为主的讲解中, 汉诺塔的动态演示通过PPT动作设置即可完成盘子移动过程;高级语言的基本语法讲解中主要以文字描述各个盘子移动过程等等。本文讨论的是应用对象与组件技术来快速高效地实现经典汉诺塔问题的动态演示程序, 以面向对象思想解决该问题, 使用组件技术突出代码的重用性。

1对象设计

面向对象的软件技术以对象为核心, 用这种技术开发出的软件系统由对象组成。其软件开发过程从始至终都是围绕着建立问题领域的对象模型来进行;对问题领域进行自然的分解, 确定需要使用的对象和类, 建立适当的类等级, 在对象之间传递消息实现必要的联系, 从而按照人们习惯的思维方式建立起问题领域的模型。

在汉诺塔的动态显示中有1个基板、3个柱子、 不同尺寸的盘子。动态演示的效果要求能够根据求解结果, 完整而又灵活地单步体现这些盘子的先后移动过程。为简单起见, 这里假设盘子个数为3并只介绍重要数据结构和关键代码的细节实现。为了提高代码重用性, 适应不同的语言环境, 程序使用了Visual Studio.NET中的MFC Active X进行组件开发。

根据面向对象技术, 该汉诺塔演示程序需要构建2个类:CPeg柱子类和CBoard基板类。CPeg类和CBoard类的定义分别如下所示:

在CPeg类中, 数组disk[]表示当前在该柱子上的盘子符号, 下标越大则表示盘子越大, 例如disks=100表示该柱子上只有编号为1的盘子。变量topx和topy表示柱子顶部坐标;pegheight表示柱子高度;topdiskx和topdisky表示当前该柱子上最顶端盘子的中心坐标;diskheight表示盘子高度;为美观起见, 盘子之间设置了一小段间隔, 使用diskin- terval变量表示。

在CBoard类中, 变量maxdiskscount表示盘子最大个数, 这里为3;boardx1和boardy1表示整个背景框的左上角坐标;boardx2和boardy2表示背景框的右下角坐标;baselength表示放置柱子的底座长度;baseinterval表示底座之间的间隔;maxdisklength表示最大盘子的长度;diskdesc表示盘子长度的递减量;basex[]和basey[]表示底盘左边点的x和y坐标。

CPeg类和CBoard类中各个变量的具体表示如图一所示。

CPeg各个数据成员的初始化在其构造函数中进行。由于每根柱子上的盘子都会时增时减, 因此CPeg类有removedisk和adddisk两个方法, 其实现代码也非常简单, 如下所示:

CBoard类的构造函数除了对各个变量初始化, 重点就在于如何对图形的各个坐标进行初始化计算, 其主要代码如下所示:

CBoard类的move方法则是充分利用了CPeg类的2个方法, 其定义如下:

参数from和to表示了柱子, diskno表示当前移动的盘子编号, 在这里是数组下标。从代码组成中可以看到, 不论是CPeg类还是CBoard类, 虽然由于布局灵活性需要的数据成员较多, 但是方法及其简单。至此, 本汉诺塔动态演示所需要的类就基本定义完成了。

2图形绘制

在MFC应用程序中, 一般情况下, 很多绘图操作都是在视类的On Draw () 成员函数中进行的。On- Draw () 函数参数中自动有1个CDC的指针p DC, 利用p DC调用CDC类的成员函数完成绘图操作。 另外, 当用户需要立即绘制图像时, 可以通过调用更新窗口函数Invalidate () 使Windows送出WM_PAINT消息, 自动调用On Draw () 函数来重绘图形。

在本文的动态演示程序中, 图形的绘制代码就是放置在On Draw () 函数中。根据汉诺塔动态演示的需求可以发现, 需要使用到的图形为直线和矩形;由于CBoard类的构造函数已经将主要坐标和变量值确定好, 那么绘制过程就以此为基础, 进行适当的加减运算, 完成相应的绘制过程。关键代码如下:

从代码中可以看出, 由于柱子和底座个数都为3, 因此可使用循环绘制出每个底座、每根柱子以及所拥有的盘子。每根柱子上盘子的有无、尺寸大小、 坐标位置都在内层循环中判断、计算和绘制。

3组件实现

组件是具有特定功能的软件模型, 一种优秀的软件重用技术, 与开发工具语言无关。本演示系统采用MFC Active X技术, 应用在Visual Basic.Net环境下。在完成对象构建和绘制图形后, 现在需要设置相应的方法, 因此在组件实现过程中增加1个对外加以调用的movedisk方法, 代码如下:

编译成功之后, 在工具下的ACTIVEX测试容器中, 选择Hanoi Activex Control, 就可以查看基本效果。在VB.Net运行环境中, 通过工具箱中的COM组件来添加刚刚生成好的汉诺塔演示组件, 将其拖到Form上, 其组件调用代码如下:

由于对象构建和组件方法设计中使用的多是整形数据, 因此需要进行类型转化, 简化的效果图如图二所示。

4结束语

本文中的汉诺塔动态演示系统运行效果良好, 完成步骤清晰有序, 代码简单明了, 有利于学生对于组件级编程的更好理解与掌握。该演示系统可以通过简单的调整来完成更加复杂的应用, 例如修改对象方法、设置组件属性和事件、将纯演示功能转换为移动盘子的小游戏。计算机课程的学习中依靠这些小实例进行讲解, 不仅增加学生的学习乐趣, 更能提高授课的效果。

参考文献

[1] (美) Peter Maurer, 著.施诺, 译.组件级编程[M].北京:清华大学出版社, 2003.

[2]卫洪春.图形环境下的汉诺塔演示[J].电子设计工程, 2014, 22 (15) :8-10, 14.

[3]付明柏.基于Turbo C的“汉诺塔”问题CAI课件[J].昭通师范高等专科学校学报, 2010, 21 (05) :42-45.

[4]徐晓琴, 徐勇.用VB编写Hanoi塔问题动态演示程序[J].电脑编程与技巧与维护, 2008, (16) :12-14.

[5]彭伟.汉诺塔问题的非递归算法那设计及可视化实现[J].武汉船舶职业技术学院学报, 2011, (06) :55-59, 72.

[6]李健.汉诺塔算法演示系统的设计与实现[J].现代计算机, 2011, (10) :76-80.

[7]朱从旭.Visual Basic程序设计综合教程[M].北京:清华大学出版社, 2005.

动态演示程序 篇7

“查找”操作是计算机中的一项基本操作。所谓“查找”即为在一个含有众多元素或记录的查找表中找出某个“特定”的数据元素或记录。

顺序查找方法是一种最基本的查找算法,在一般的计算机语言程序设计课和数据结构课程中都有介绍。顺序查找方法一般用于顺序表表示的静态查找表,其中的元素或记录是无序的。其查找过程为:从表中的最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查的记录并返回所查的记录在查找表中的位置;反之,若直至第一个记录,其关键字和给定值比较都不相等,则表明表中没有所查找的记录,查找不成功,返回0。此查找过程可用下面的算法描述:

算法:Sequential_search(int A[0..n],int x)

输入:有n个元素的数组A[0..n]和给定的特定值x。

输出:如果x=A[j],则输出j;否则输出0。

过程:A[0]=x;//在最低下标处设置“哨兵”

for j=A.Length to 0 step-1//从后向前查找

if(A[j]==x)

return j;

//找到返回x在数组中的位置,找不到时返回0

endfor

2 动态演示程序的实现

打开Visual Studio 2005,新建一个Visual C#Windows应用程序项目,项目名称为“SearchData”,将默认窗体名称Form1改为SearchFormDemo,在窗体上添加一个Panel控件,作为动态演示顺序查找过程的窗口,添加两个Timer控件,设置其Interval属性为1000,用来代替算法中的循环和查找比较过程,用Timer控件的定时特点来达到动态演示的效果。程序运行界面如图1所示。

2.1 生成初始数据并安排界面

当单击“生成数据”按钮时,首先将演示窗口清空,然后随机产生查找表中的数据以及要在其中查找的数据,并将这些数据用动态生成的Label控件展示在界面上,同时设置监视哨。为了达到明显的动态效果,对Label控件的前景色和背景色都进行了设置。

2.2 开始查找

当单击“开始查找”按钮时,首先将指针定位在最后一个记录上,使查找从最后一个记录开始。同时启动定时器以开始查找过程,此时需禁用“开始查找”按钮。

2.3 控制查找过程的定时功能

第一个定时器用来控制循环操作,当查找还没有结束时,继续查找,否则结束查找。

2.4 控制比较操作的定时功能

通过定时器控件的定时功能以及Label控件颜色的变换实现比较操作的动态演示。

3 结语

算法一般是比较抽象的,通常难以理解,不容易掌握和理解算法的实质和实现过程,尤其是对初学者来说,若不能把握算法的实质,则很难顺利地写出程序,因此,将算法的实现过程形象、直观地表现出来,对于掌握算法有重要的意义。

摘要:顺序查找算法是在学习各种程序语言和数据结构课程时都会遇到的算法,采用C#编程对该算法的实现过程进行了形象、直观的动态演示。

关键词:查找,关键字,哨兵,定时

参考文献

[1]严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,1997.

[2]谭浩强.C语言程序设计[M].北京:清华大学出版社,2000.

[3]尹立宏.Visual C#.NET应用编程150例.北京:电子工业出版社,2003.

动态演示程序 篇8

将冶金机械的功能直观的、全面的向客户展示, 是推动客户选择冶金机械设备的重要环节, 但冶金机械设备复杂的结构、庞大的工作任务、恶劣的工作环境等方面决定冶金机械设备通常体积非常大, 运行原理较为复杂, 要让非专业的客户在短时间内通过冶金机械, 准确的了解冶金机械的功能和设计特色存在较大的难度, 所以人们尝试通过平面化的基于计算机技术的动态仿真演示系统向客户展现冶金机械的性能。

1 单机展示系统设计

冶金机械中的部分单机设备结构非常复杂, 如复摆颚式破碎机等, 在对此类单机进行动态仿真演示系统设计的过程中, 要对其具体的工作原理、功能、结构等进行准确、全面的掌握, 然后进行针对性的设计。笔者认为在设计的过程中要从以下方面着手:

1.1 在选择应用的设计软件中完成准备工作

在建模和动画制作等方面功能较突出, 且对虚拟现实软件适应性较强、工作效率较高的Auto CAD软件中进行设备仿真建模, 在此过程中需要注意, 由于建模过程中, 任何参数不准确都会影响到冶金机械的联动效果或模型整体的精度, 所以在建模的过程中, 应尽可能应用冶金机械零件和装配的电子图纸, 然后在软件中对电子图纸进行简单的调整, 并利用3ds Max软件中的捕捉、绘制等功能, 对建模中的局部设计进行调整。

1.2 完成冶金机械金属材质的仿真设计

在设计的过程中, 要在单色背景中向客户真实的展示出冶金机械的金属材质, 要用非真实反射环境体现冶金机械的材质, 并利用光线跟踪反射功能, 体现出不同位置下金属材质的光线差异, 完成材质制作过程, 图1为冶金机械动态仿真演示系统截图。

1.3 完成可烘托仿真真实性的灯光设计

在设计的过程中, 考虑到只有普通灯光或扫描线渲染器可以烘托出冶金机械设备的真实性, 所以要在建设单个泛光灯的基础上, 进行多次复制、粘贴, 形成半球状的泛光灯排列矩阵, 此时将灯光强度统一调整到0.02, 并用强度为0.2的主灯对所有泛光灯进行照射, 形成具有烘托作用的光线阴影[1]。

1.4 完成冶金机械演示动作的仿真设计

另外, 对需要展示的具体冶金机械功能进行设计, 此部分设计是单机展示系统设计的重点和难点, 需要引起设计人员的高度关注。例如在针对圆锥式破碎机的偏心主轴和破碎圆锥进行设计的过程中, 忽视两个结构在运行的过程中会在偏心套的作用下, 会以腔体结构为中心进行运动, 而且在运动的过程中会产生自转, 就会导致演示的过程中, 客户不能准确的了解此类冶金机械的运行原理, 加大冶金机械运行故障的发生概率。笔者认为在具体设计的过程中, 应先通过链接工具, 将主轴和除偏心主轴外的零件建立链接关系, 以此保证仿真演示动画可以反应出偏心主轴在外力作用下的自转过程[2]。在此基础上, 设计人员再通过链接工具, 将偏心主轴和偏心套之间建立链接关系, 使原本独立的各结构之间形成相互影响的关系。在以上互动影响关系形成后, 设计人员应有意识的将二维图像转化为三维的动画过程, 具体操作是, 先将坐标的格式调整成为自身坐标, 使界面中原本处于倾斜状态的部件方向得到调整, 然后通过旋转工具对部件进行旋转操作, 在操作的过程中完成整个旋转过程的动画记录, 此时会发现记录的旋转动画在播放的过程中, 按照之前的链接关系和软件自身默认的动力学原理, 可以基本反应出偏心主轴和破碎圆锥的运动轨迹。

出上述功能仿真设计外, 冶金机械在应用过程中与演示发生碰撞并对演示进行破碎处理的过程, 也是冶金机械设备向客户重点展示的方面, 所以在进行冶金机械动态仿真系统设计的过程中, 要有意识的对此方面进行重点设计。笔者在进行此方面设计的过程中, 主要通过3ds Max软件所具有的空间扭曲功能和粒子系统完成, 具体设计过程是先将模拟真实场景的石头模型替换粒子发射器发出的粒子模型, 然后对破碎机腔体结构进行仿真设计, 并通过全动力学导向器在仿真的场景中完成对碰撞代替物和圆锥部件的提取, 两者均作为仿真系统的碰撞件[3]。最后, 利用绑定工具将提取的碰撞件与粒子系统之间建立绑定关系, 此时通过粒子发射系统可以直接发射出岩石, 与冶金机械的腔体发生碰撞, 而且可以反应出碰撞过程中, 腔体的塑性变化。

需要注意的是, 在进行冶金机械功能设计的过程中, 存在的设计方法并不统一, 设计者要结合自身的设计习惯和设计水平进行灵活的选择, 例如在进行上述设计的过程中, 除采用上述方法外, 设计者还可以选择PF粒子流和NVIDIA图形卡配合应用的方式实现, 虽然设计过程相比笔者介绍过程更为复杂, 但也可以达到动态仿真演示的效果, 图2是冶金机械动态仿真演示系统截图。

2 冶金机械设备生产线的作业状态仿真演示设计

相比冶金机械的性能, 客户更注重冶金机械的工作状态, 所以设计的动态仿真演示系统, 不仅要可以虚拟仿真单机机械设备, 而且要对冶金机械设备的生产线作业状态进行仿真, 笔者认为在设计的过程中, 应重点从以下方面进行:

2.1 完成冶金机械生产线场景的设计

要对真实的生产线场景进行仿真设计, 在设计的过程中, 为简化场景设计的复杂度和难度, 应先将单机设备中外部不能直接观察到的部件删除, 然后按照冶金机械设备在真实作业场景中与其他设备的写作关系, 进行冶金机械设备和相关设备的仿真摆放, 在此过程中, 需要注意计算机存储空间和反应能力等均是有限的, 要保证演示过程流畅清晰, 在进行场景设计的过程中, 具体的物体片数要合理的控制。

2.2 完成冶金机械具体作业过程的仿真设计

考虑到冶金机械在生产线中具有传送物料的功能, 在仿真演示系统中要对此作业状态进行动态模拟。在设计的过程中, 应先将粒子系统设置在具体的传送线路中, 然后通过画线命令和路径跟随等功能设计出冶金机械在物料运输中的具体路径。在以上设计完成后, 通过绑定工具可以使冶金机械和具体的运动路径之间建立连接, 此时通过播放动画可以仿真出冶金机械按照设计路径传输物料的过程。需要注意的是, 为保证仿真的真实性, 设计人员在完成以上设计过程后, 要针对具体的粒子发送时间、速度等方面进行合理的调整。

在以上设计环节完成后, 利用Web Max等虚拟显示软件, 将设计的三维图像转化为平面网页向客户传输, 客户可以从仿真演示动画中直接了解冶金机械设备的外形、结构, 在此过程中, 客户可以结合自身的实际需要, 对冶金机械进行随机的拆卸和组装, 可见在以上设计的冶金机械动态仿真演示系统中, 基本突破了真实冶金机械设备展示的限制约束条件, 这在一定程度上说明本设计具有科学性和合理性。

3 结论

通过上述分析可以发现, 现阶段人们已经认识到利用基于计算机技术的虚拟系统和仿真系统实现冶金机械动态仿真演示的可行性和必要性, 并在实践中有意识的结合现有仿真、虚拟技术发展成果进行冶金机械动态仿真演示系统的设计, 这是冶金机械设计、宣传推广过程中, 信息化水平提升的具体体现, 应结合计算机技术的发展不断的优化。

摘要:冶金机械设备体积通常较大, 冶金设备企业要向客户展示冶金机械设备的功能, 对展示环境、展示角度等方面均方面均提出了较高的要求, 而计算机图形图像技术、三维仿真技术等具有虚拟、仿真功能的信息化技术的发展, 为大体积冶金机械设备动态仿真演示提供了可能, 为设计人员与客户更好的沟通提供了“工具”, 在此背景下, 本文针对冶金机械动态仿真演示系统的设计与实现问题展开研究, 为冶金机械虚拟仿真演示提供参考。

关键词:冶金机械,动态仿真,演示系统

参考文献

[1]崔建伟.基于Phys X的冶金机械演示系统设计[J].计算机与现代化, 2012, 05:113~115.

[2]钟登华, 王忠耀, 李明超, 刘杰.复杂地下洞室群工程地质三维建模与动态仿真分析[J].计算机辅助设计与图形学学报, 2007, 11:1436~1441.

上一篇:煤矿提升运输下一篇:体育俱乐部运动