当前位置:文档之家› 用C++实现数学函数图形绘制(含源文件)

用C++实现数学函数图形绘制(含源文件)

用VC++实现数学函数图形绘制Use the VC++ to realize drawing figures of mathematic functions 摘要Visual C++(以下简称VC++)是面向对象与可视化软件开发工具中比较成熟的一类。

MFC是VC++中直接由Microsoft提供的类库,它集成了大量已定义好的类,我们可以根据需要,调用相应类,或根据需要自定义类。

正是基于MFC 的这种特性,我们试图设计出具有封装性、独立性的功能模块------函数数据生成模块,函数曲线输出模块,模块之间的桥梁是由模板类CArray派生的CPoint 类数组充当的。

函数数据生成模块用来实现对函数的设置并获得采样点,数组得到采样点数据并将其传递到输出模块中。

从整体来看,实现了各程序模块的独立性,使得在函数模块中可任意添加、删除函数,可使用不同的DC和GDI,可实现不同的输出方式,整个工程在函数绘图功能上是无限扩展的。

经过反复的调试和检验,我们实现了预期目标。

我们的主要目的是尝试VC++在数学函数绘图方面的功能和应用。

这是对VC++的探索,也是对数学函数绘图多样化的尝试。

关键字数学函数图形绘制模板数组三次样条【Abstract】Visual C++ is one of the object oriented and visual software developer ,which is more mature than others . MFC is a class warehouse which is supplied by Microsoft ,and it contains a great deal of defined classes .we can transfer the corresponded class if necessary ,or give a fresh definition according our needs . Exactly based on MFC this kind of character, we try to design out the function mold which have the function to pack the class and be independent ------Mold for creating Function data, Mold for outputting the function curve, mold piece of born mold piece be sent by Cpoint Array rared by template CArray.The first mold is to make out sets for the function and get data we need which will be sent to the defined array,so now the array have the data that is to be got by the second mold.From whole project,we can see the independence of each mold,and exactly we may increase and decrease functions if necessary,we even can use different DC and GDI to realize the customed exportation method by which we can have a new view of the function curve. So, the function of the project can be extended freely.after repeatedly debugging and examining,we achieve our purpose.The most important thing we are trying is to find a way to connect the VC++ and the figures of mathmetic functions.This is not only a exploration to VC++,but also a attempt for realizing diversifing the mathmetic functions.【Key words】Mathematic functions drawingfigures template array tripline目录用VC++实现数学函数图形绘制 (1)Use the VC++ to realize drawing figures of mathematic functions (1)摘要 (1)关键字 (1)一、引言 (4)二、设计思路 (5)2.1总体结构的设计 (5)2.2基本结构的设计 (6)2.3面临的问题 (6)2.4解决问题的方法 (6)三、实现三次样条函数绘图 (10)3.1函数定义 (10)3.2边界条件 (10)3.3函数表达式 (11)3.4算法 (12)3.5程序实现 (12)3.6效果 (14)四、结论 (16)参考文献 (18)附录 (20)一、引言从事科技研究的人员常常需要解决一些复杂的数学问题,而这些数学问题的解答往往可以从它的函数图形上很直观、明了的表现出来,这时快捷方便的绘制出该数学函数的图形就显得尤为重要。

用Matlab等数学软件就可以做到这一点,但是当我们需要在我们自己的软件产品中快速简洁的绘制出众多自定义的数学函数图形时,用Matlab等数学软件就有些麻烦。

所以我们选择了用VC++来实现数学函数图形的绘制。

随着软件工程技术的不断发展,应用面向对象的编程技术已经成为当今软件开发的重要手段之一,尤其是VC++的出现,大大推进了面向对象与可视化编程技术的应用与发展。

VC++主要使用了两种方法:1.用Windows提供的Windows API函数。

2.直接使用Microsoft提供的MFC类库。

我们选用的是MFC Appwizard(exe)工程。

MFC类库是VC++中直接由Microsoft提供的一种编程资源,是对程序设计的高度抽象,它集成了大量已定义好的类,我们可以根据需要,调用相应类,或根据需要自定义有关类,使得程序员的主要精力不用放在程序设计的细节实现上,而放在程序的功能拓展上。

它允许在编程过程中自定义和扩展运用程序中的类,同时还允许对Windows API 函数进行存取,从而使运用程序能以最小的规模实现最丰富的功能,而且能提供高效率的运行代码。

更重要的是,MFC可以封装不同的类,将类封装后,形成一个功能模块。

也就是说,允许为实现功能模块而将不同的类封装。

我们选择了用Visual C++来实现数学函数图形的绘制。

还有以下几种考虑:1、VC++的良好特性促使我们去了解,熟悉和开发;2、四年来计算数学的学习让我们产生了对一些数学算法进行深一步的实践探索;3、用VC++来实现函数的绘图功能是很有优势的。

VC++的绘图过程直接引用Windows系统本身资源,绘图速度很快,不同的映像模式还可以确保图形的准确;其可视化的界面设置简单明了;4、对图形的绘制和算法的研究是无止境的,很多时候需要更具体、更详尽和易懂的算法设计,这需要选取一种好的语言自己编写。

VC++基于C++语言,易懂且容易掌握。

MFC类库的特性无限扩展了VC++的功能,用它来实现复杂多变的数学算法无疑是一个好的选择。

VC++运用对象、类、消息传递、封装等概念来构造系统,要实现各种各样图形的绘制,我们可以将函数看作对象,将各种函数封装起来,形成不同的类,组成函数模块。

将处理数据和输出图形定义在不同的模块中,而模块之间的接口则是通过用VC++的类数组模块定义的CPoint类数组实现的。

二、设计思路2.1总体结构的设计正是以上了解使我们得出了这样一条编程思路:函数数据生成模块,函数曲线输出模块,中间媒介由CPoint类数组构成。

函数数据生成模块是实现对函数的设置:包括参数设置,自变量设置,数据输入,并从算法中得到采样点,再将采样点传给CPoint类数组。

函数曲线输出模块则要从CPoint类数组中得到采样点,在已定义好的输出环境中以描点连线的方式绘制图形。

(如图1.1)(图1.1)这样的设计既体现了模块间的独立性,也体现了数组在两个模块间的桥梁关系。

由于对函数的设置也是独立的,选择不同的函数会出现与之相适应的设置,绘出相应的函数图形,所以各函数间也是互相独立的,对整个工程的其他部分是没有影响的。

我们以sin,cos作为开始的尝试,主要为熟悉VC++的开发环境,构造出良好的绘图环境,再以三次样条函数为重点实现对算法的分析,充分利用MFC的优势,达到目的。

2.2基本结构的设计1.将所要表达的对象封装。

对函数的属性主要是参数设置-----一般用对话框来实现;对函数的服务即函数算法用具体函数来表达,再将具体的函数一个个的封装到为他们创建的函数模块中,使它们完全独立开来;2.我们用函数数据生成模块得到了数据-----采样点,为实现合理的函数绘图形式,对采样点要做必要的处理后,放入到类数组中;3.函数曲线输出模块专门负责营造输出氛围:用画笔还是画刷,用多文档输出还是单文档,用那一种映像模式,界面看起来是否美观。

当然,最终是获得数组中的数据,将它们放到适合的坐标轴上,随即连线成图。

看似独立的三个部分实际上是相互牵制和彼此照顾的,采样点受到模板数组的影响,通常不同函数得到采样点在放入模板数组前所作的处理也不同。

2.3面临的问题我们面临的问题有技术方面的和对每个函数的具体设置,有如下几个方面:1.函数参数设置,自变量的范围,函数的具体算法;2.输出设置:绘图方式,坐标的建立、设置,图形的缩放;3.对数组模板类的引用;4.对误差的控制。

2.4解决问题的方法1、函数数据生成模块方面,我们利用对话框来完成对自变量范围、各种参数的设置,这使得对函数特性控制更明了和简单。

(如图1.2)(图1.2)函数参数设置对话框所要关注的是采样点。

采样点通过算法得到后,需要符合类数组对数据的要求,考虑到屏幕坐标是整型值,因此,所定义的类中的分量类型也应是整型,而采样点的数据类型是多样的,所以输入前,需要对它们进行必要的处理,而又由于受输出模块中映像模式的影响,输出时也有必要对从数组中得到的数据进行处理。

相关主题