基于VC++的高职动态微课件设计

2016-06-16 06:22
安阳师范学院学报 2016年2期

陈 进

(安徽电子信息职业技术学院 信息与智能工程系,安徽 蚌埠 233000)



基于VC++的高职动态微课件设计

陈进

(安徽电子信息职业技术学院 信息与智能工程系,安徽 蚌埠 233000)

[摘要]分析了高职动态微课件设计的特点,提出了将VC++随机数应用于动态课件设计的方法,并给出了高职《基础化学》课程动态微课件设计的实例。

[关键词]VC++;动态微课件;随机数序列

1问题提出

图1 MATLAB绘制的《氢原子径向分布图》

科学计算可视化技术不仅在工程科学领域有重要广泛的应用,也被广泛应用于高校各个专业的计算机辅助教学领域。例如,专业科学计算可视化软件MATLAB可以绘制函数的图形,以及特殊曲面,如双叶双曲面、马鞍面的图形,能够有效的辅助《高等数学》学习。MATLAB的优秀的图形绘制能力、动态观察功能,可以实现立体图形的多角度、全方位观察,有助于促进学生对于专业知识的学习。在高校《基础化学》教学中,同样可以利用MATLAB绘制氢原子s、p、d轨道角度分布图,将教学内容可视化、立体化[1]。而学生通过动态观察图形(通过菜单/图标选项/Rotate 3D/按住左键来实现),可以深化对于知识点的理解,从而起到降低教学难度,促进学生学习的作用。利用MATLAB绘制的《氢原子径向分布图》如图1所示。其动态观察(即从不同角度观察)的图形如图2所示。

图2 《氢原子径向分布图》动态观察图

科学计算可视化软件虽然具有强大的辅助教学作用,其缺点也是明显的。科学计算可视化软件的最主要功能是数据分析,其绘图功能是有一定约束的。例如,上述径向分布函数D(r)的意义是表示电子在一个以原子核为中心,以r为半径,微单位厚度为dr的同心圆薄球壳夹层内出现的概率[2];它反映的是核外电子出现的概率与距离r的关系。其图像应为立体图形。而MATLAB绘制D(r)图像,一般仅画出xy平面上的氢原子径向分布图。此外,每次画出的图像是静止的(如图1所示),不能很好地表达“电子出现概率”这一概念。

2VC++动态微课件设计

仍以《氢原子径向分布图》教学内容为例。氢原子径向分布函数的图像应该是立体图形,而不是平面图形;电子的运动状态是复杂的,不能用电子的绕核旋转来模拟,只能用出现的概率来表示;在不同时刻点出现的位置是随机变化的,只在某些区域出现的概率大。因而设计的辅助教学课件应为(1)点(表示电子)出现的位置随机变化的(概率分布与D(r)一致);(2)三维动态显示的图形。这些功能专业的软件难以实现,但是可以通过采用底层语言编程开发exe文件实现。在各种编程语言中,VC++是使用地较为广泛的一种。VC++能产生符合科学计算要求的随机数序列[3],对于动态随机绘制具有重要意义,可以模拟真实的科学计算场景。对于氢原子径向分布函数的图像绘制来说,完全能够满足电子出现的随机位置的计算需要。此外,VC++本身自带GDI(Graphics Device Interface,图形设备接口),可以轻松实现平面图形的绘制。但是对于三维图形,需要进行坐标系和空间转换,需要进行复杂的编程。因而一般情况下采用三维底层图形库(如Direct X或者OpenGL)简化三维图形的绘制[4]。本文在三维绘图部分直接采用OpenGL.下面给出《氢原子径向分布图》绘制实例。

3基于VC++的《氢原子径向分布图》绘制实例

3.1绘制算法

(1)分布函数

这里以氢原子1s轨道为例。其径向分布函数由下式给出[5]:

(2)算法设计:

1) 给定r的值

4) 每一个D(ri)对应于ri时的概率值。由概率论中的大数定理,只要n足够大,频率逐渐稳定到概率,而频率是与电子在ri时出现的次数相对应的,因而,如果给定某适当的值k,计算mi=[k*D(ri)],就可以将mi作为半径为ri时电子出现的次数。因为D(ri)可能比较小,k的取值应该使得mi尽可能的离散,亦即需要尽量使得mi≠mi+1,i=0,1,….n-1.

5) 在距离球心ri(i=0,1,….n-1)的球面上,随机动态绘制mi个点,这样就完成了绘制。在绘制效果上,不同时刻mi个点绘制的位置是不同的。

3.2算法实现

(1)VC++随机数产生

为了产生动态的绘制效果,需要在OpenGL的OnInitialUpdate()调用随机数发生器的初始化函数srand((unsignedint)time(NULL)),通过使用time函数来获得不同的系统时间作为随机种子[3],在主程序main()中调用rand(),就会在不同时刻产生不同的随机数序列,按此序列绘制图形,可实现氢原子径向分布的动态绘制。每隔一定的时间(这里设为33ms)强制重绘图形,由于随机数序列不同,每次重绘的结果就会不同,从而产生动态效果。

(2)OpenGL绘图

OpenGL中,点是由空间直角坐标表示的。空间一点P(x,y,z)的直角坐标与球面坐标有如下关系[6]:

(1)

其中,r以及θ角与φ角的意义如图3所示。

图3 直角坐标与球面坐标对应关系

则对于距离球心ri(i=0,1,….n-1)的球面上的点P(x,y,z),由(1)式,有

(2)

(3)半径为ri的球面上mi个随机点的坐标

按上述分析,要在半径为ri的球面上绘制mi个点,首先要计算出这mi个点的坐标。这里采用如下方法:两次调用随机函数rand()产生[0,2π]之间均匀分布的随机数,以此作为θ的随机角度,一次作为φ的随机角度。这样就得到一个均匀分布的二维随机数对(θ,φ),其中θ,φ∈[0,2π]。将此过程循环mi次,得到绘制mi个点所需要的mi个数对(θ,φ)。进一步由(2)式计算出该点的坐标(x,y,z).在此位置绘制点。其部分伪码如下:

for(int j=1;j<=;j++

{l[j]=3.14* ( (float)rand()/(RAND_MAX) );//产生0-Π之间的随机数,作为θ的值

m[j]=3.14* ( (float)rand()/(RAND_MAX) ); //产生0-Π之间的随机数,作为φ的值

glTranslatef(*sin(l[j])*cos(m[j]), *sin(l[j])*sin(m[j]), *cos(l[j]));

//计算(x,y,z),并将坐标系平移到该处

auxSolidSphere(0.1);//这里直接使用OpenGL辅助库里的球体函数绘制点}

3.3绘制效果

采用上述算法绘制的效果如图4所示。为观察方便,从这里仅绘制了第三第四象限的分布图,而且从(1,-1,1)的方向观察图形。可以看到:(1)电子云是动态显示的,不同时刻电子云图形是不同的;(2)氢原子径向分布图反映的是在不同位置出现的概率,可以观察到在某一薄球壳上概率最大。通过设置视角,还可以从不同角度观察,立体把握氢原子径向分布。

图4 不同时刻氢原子径向分布图

图5 正面观察的图形

3.4功能扩展

基于VC++开发的高职动态微课件,图形真实感强,绘图效果优良;而且很容易通过修改代码的方法开发新的课件,以适应不同教学环境的要求。例如,对于上述的氢原子径向分布图,如果将视角改为(1,1,1),就得到正面观察的图形(如图5所示)。教学中,为了更好地体现在某一薄球壳上概率最大的教学效果,还可以设定一定的阈值,对于出现概率位于某一阈值内的点进行图像增强,以取得更好的教学效果(如图5所示)。

4总结和推广

底层语言比专业软件约束少,能开发出符合特定教学需要的exe文件,可以实现专业软件无法实现的特殊功能,从而最大限度地发挥计算机的辅助教学作用。底层语言在高职微课件设计中的应用,可以将教学难点以可视化的方法表达,使学生容易理解和接受;同时也为进一步的探究性学习打下基础。实践表明,基于VC++的高职微课件设计,符合高职学生的教学实际,对于促进学生对于教学内容的理解,加快知识的建构和转化具有一定意义。

[参考文献]

[1]汪武.Matlab在化工原理计算中的应用[J].淮南师范学院学报,2007,(3).

[2]魏祖期.基础化学实验(第五版)[M].北京:人民卫生出版社,2001.

[3]吴文虎.程序设计基础[M].北京:清华大学出版社,2011.

[4]程飞.基于OpenGL的高等数学多媒体课件实现[J].洛阳师范学院学报,2005,(5):72-74.

[5]翁之望,粟智.用MATLAB语言解氢原子与类氢离子的定态薛定谔方程[J].新疆师范大学学报(自然科学版), 2000,(4).

[6]陈兆斗.高等数学(工本)[M].北京:北京大学出版社,2006.8.

[责任编辑:江雪]

[收稿日期]2016-01-18

[基金项目]安徽省教育厅2013年自然科学研究项目《基于OpenGL的CAD仿真系统设计研究》(编号:KJ2013Z013)。

[作者简介]陈进(1965-),男,江苏扬州人,讲师,主要从事CAD/计算机仿真研究。

[中图分类号]TP311.1

[文献标识码]A

[文章编号]1671-5330(2016)02-0044-03