用ATL ActiveX绘制任意平面函数的曲线

一、前言

这是非常有挑战性的题目。对于用户输入的任意一个平面函数f(x),绘制出其函数曲线。这里最关键的技术难点就是如何实现计算表达式的值。在《编译原理》和《数据结构》的书中,都有对表达式运算方法的论述。说实在的,在编译型计算机语言中实现对用户输入表达式的运算是非常困难的。需要对表达式进行扫描,去括号,按照运算符的优先级生成2叉树,然后遍历该树生成逆波兰表达式,再然后通过栈的方法进行运算。如果在表达式中再包含有函数的话......描述起来都麻烦,更不要说用程序实现了:-(

编译型语言不容易实现,那么解释性语言又如何那?有的解释性语言是可以的,但需要一些实现的技巧,而大多数解释性语言光依靠自身功能还是不能完成的。80年代末期,我在 AppleII 的 BASIC 上使用预留程序空间的方式实现了这个功能,能想到这个解决方案,当时还自我陶醉了好多天那 :-)

最好的,效率最高的解决方案当然是《编译原理》里所描述的方法,但是实现起来的确有一定的难度。上中学的时候,首次接触到计算机和计算机语言,我就立下了“雄心壮志”,将来一定发明一个自己的计算机语言。上大学的时候,我咨询《编译原理》课老师,“学习完成后,能否自己发明计算机语言?”我得到了老师肯定的回答----“别做梦了!”:-( 毕业工作后,我也成为了一名计算机老师,一个偶然的任务,让我重新萌发了我不死的“贼心”。由于实验室的 Z-80 单板机数量有限,试验台又太占地方,结果学生需要5,6个人分一组一起做实验,教学效果太差。于是领导分配给我一个任务:在PC机上作一个Z-80的仿真环境,也就是在PC机上实现一个Z-80的交叉汇编和 DEUBG 调试环境。还好,由于在汇编级别上进行仿真,并不困难,只要经过比较简单的语法分析和词法分析,然后查表给出汇编的二进制机器码,任务就完成了。在此次任务的过程中,积累了一些语法、词法分析的经验,于是,我开始了真正创造计算机语言的工作,并最终完成。语言虽然发明了,功能非常有限,但我主要的“贼心”已然实现,也就没有什么兴趣继续完善它了......不久前,看到 VCKBASE 上一个即将毕业的学生发表的文章和代码,实现了C的编译器。虽然还比较简陋,但比起我们当年,现在的学生水平(至少这个学生)另我刮目相看。

好了,言归正传,看看今天这个题目的实现方法吧。既然用表达式分析实现起来非常困难,那么换个思路,用我们的C++编译型语言动态地构造出计算表达式的脚本,然后执行脚本,让脚本引擎帮我们去计算就是了。我用ATL写了个ActiveX的控件,下图就是事例程序在“控件测试容器”中的表现。你也可以在其 它环境下去使用它,比如在HTML中。

开发">
图一 控件测试容器中运行的函数曲线绘制控件

时间: 2024-10-29 11:53:39

用ATL ActiveX绘制任意平面函数的曲线的相关文章

qt画点的问题?-在QT中怎么绘制cos()这个函数的曲线

问题描述 在QT中怎么绘制cos()这个函数的曲线 我要画一个曲线出来.在QT文档里面找了void QPainter::drawLine ( const QLine & line )这个函数,但是不可以,它是一确定的点来画点的.请大神们指教一下. 解决方案 http://blog.chinaunix.net/uid-24219701-id-3157288.html 解决方案二: 至于是什么函数,只要你根据x算出y就可以 解决方案三: 绘制余弦函数曲线Qt绘制贝塞尔曲线Qt- 绘制实时曲线

双缓冲绘图和窗口控件的绘制——ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 .

双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误   cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后希望在这个窗口中绘制我们的图像.图形等数据,然而ATL向导生成的代码中包含很多错误,下面是其自动向导生成的代码:     HRESULT OnDraw(ATL_DRAWINFO& di)    {        RECT& rc = *(RECT*)di.prcBounds;       

activex-Web调用ATL ActiveX控件,IE8无法打开网页,IE7可以运行,但提示内存访问冲突!

问题描述 Web调用ATL ActiveX控件,IE8无法打开网页,IE7可以运行,但提示内存访问冲突! 我的参考文章http://blog.csdn.net/u010258235/article/details/16823543,自己按照这个步骤试了一下,但是打开html网页时提示如下: Internet Explorer 已经为了帮助保护您的计算机而关闭此网页 运行不正常的加载项或恶意加载项导致 Internet Explorer 关闭此网页. 您可以执行以下操作: 转到主页 尝试返回查看的

MFC ActiveX控件与ATL ActiveX控件的比较 .

1.两者均可使用VS IDE中AppWizard来建立框架,前者使用"MFC ActiveX Control Wizard",后者使用"ATL COM AppWizard". 2.用MFC建立的ActiveX控件的扩展名缺省为".ocx":用ATL(活动模板库)建立的扩展名缺省为".dll". 3.用MFC建立ActiveX控件要简单得多,原因是MFC省去聊很多低级的COM概念,且控件设计中可使用多种MFC类,如CString

PDF文件怎么绘制任意多边形标注?

  PDF文件怎么绘制任意多边形标注?           1.我们可以在百度搜索相关的PDF编辑器软件来实现对相应的PDF文件的编辑.如图所示的打开PDF文件的效果. 2.在PDF文件编辑器中找到工具栏,在工具栏中找到注释工具,点击注释工具,在下拉工具菜单中选择添加多边形形工具. 3.添加椭圆形工具后,可以在PDF文件页面右侧出现多边形工具属性的页面内容,我们可以在次对多边形的样式等进行设定. 4.如果找不到右侧的多边形工具属性,我们还可以通过对工具栏中的多边形工具点击鼠标右键,进入到注释样式

vc画图-怎样画出任意形状的封闭曲线

问题描述 怎样画出任意形状的封闭曲线 有一个不规则的封闭曲线,怎样把它画出来,用尽量简单的语句,谢谢啦谢谢啦 解决方案 看你用什么了,一般语言都封装了gdi+,直接把点坐标传给路径,就画出来了 解决方案二: http://download.csdn.net/detail/gnawnuhcuil/3536816 解决方案三: google 贝塞尔曲线 绘制. gdiplus对此也有封装.

Photoshop+AI组合绘制炫彩的飘逸曲线

AI里面制作曲线是非常快捷的,尤其适合制作一些弧度非常完美的曲线色块.基本上基本就可以做好.大致色块确定后,后期用PS上色及调色,出来的效果会更加完美. 最终效果 1.打开Illustrator, 使用钢笔工具 (快捷键: P), 绘制两条不同的曲线, 使两条曲线相交.这两条曲线的形状将是我们制作的烟雾的形状.在此之后,重复上面的步骤再绘制两条曲线. 从这两对曲线中选择其中一对,设置第一条曲线为白色,另外一条颜色设置为70%的灰色.另一对曲线也设置同样的颜色但是颜色和第一对相反,我们之所以这样做

ios开发之在UIView上使用自定义曲线绘制复杂图形(贝塞尔曲线)

有时我们需要绘制一个不规则路径的图形,里面可能包含直线或者曲线,这时就可以使用 UIBezierPath 来实现.   UIBezierPath类可以表示任何能够用Bezier曲线定义的形状,我们可以创建自己的自定义曲线.完成操作后,可以像其他路径一样,使用所得到的UIBezierPath对象进行填充和描边.   1,下面演示使用UIBezierPath绘制一个不规则图形: (1)画笔移动到矩形区域左上角 (2)从笔的当前位置向右上角的点画一条直线 (3)从笔的当前位置向左下角的点画一条直线 (

Matlab绘制透明平面(二元函数)

一.需求来源 对空间结构聚类,恰好是圆台,找到了上下底面的方程,所以画图. 二.需求解决 2.1 绘制平面 x = linspace(0,5,100); y = linspace(0,4,100); z = 2.*repmat(x,100,1) + 8.*repmat(y,100,1); surf(x,y,z); 第一需要说明的是,x是0到5,分成100分,注意分就是个数,用linspace最好,不要x = 0:5/99:5(中间分子的5是 (5 -0 )得来的,分成100分不是要除以99么,是