一元数学函数图示器
一、 题目:一元数学函数图示器(参考设计如下图)二、目的与要求:
1.目的:
培养学生综合利用Visual Basic语言进行程序设计的能力,主要是培养学生利用VB的图片框控件进行作图技能。
2.基本要求:
欲完成此设计题目,要求必须熟练使用和掌握PictureBox控件的各种属性(如forecolor、backcolor、currentX、currentY,DrawWidth等)和方法(如Cls、Print、Line、Pset,Scale等)
①能够显示固定一元函数(例如示意图中的函数)的图形。
②可以设置常用的显示参数,包括显示范围,坐标轴、曲线、显示区底色,及刻度文字及线宽等特性,显示设置的范例可以参考右图。
③能够对图形进行缩放,并可以在显示区直接选取显示范围(窗口放大),可以对图形进行平移观察,平移的步长可以设置,当显示范围改变后,标尺刻度和网格密度应该能自动调整,以适应新的显示范围。如右图所示。
④支持鼠标点击图形上任意一点,显示出该处的x值和对应的函数值,可以用一个消息框来显示此信息(见右图)。
⑤程序界面美观,支持多个函数的叠加显示。
3.创新要求:
在基本要求达到后,进行创新设计,如进行任意一元函数(程序中直接输入函数)的图形显示,支持函数图形的打印(以打印机的分辨率进行打印,不是直接拷屏)。还可以实现一下窗口大小改变后程序自动调整图示区的范围等功能。
三、设计方法和基本原理:
1.问题描述:
程序界面见上,功能描述参见基本要求的内容。
2.问题的解决方案:
①设计程序界面。
因为用的是常用控件,界面设计没有什么难度,照样子拼好就可以了。
②Picturebox控件中背景、曲线、网格轴的颜色选择。可以直接设置控件对应的属性来完成,因为要画不同类型的线,所以在一个过程中可能需要多次设置同一属性。
③显示分辩率的实现。所谓的分辩率就是用多少条直线来逼近所画的曲线,越大画的越精确,越小画的越快,本程序建议限定在100-1000之间。
④绘制曲线的实现。
这也是本程序要实现的核心功能,主要包括的内容有:
★ Picturebox控件中坐标系的初始化。然后利用Picturebox控件的Scale方法进行设置。图形区的坐标范围要有初始值,可以在form_load事件中设置各参数的初值。
★ 绘制坐标轴及刻度网格线,并标上刻度值。
坐标刻度(又称为网格)的显示可以采用每隔一定的间距画一条线来实现,刻度的文字标注同时进行,注意调整写字的位置,让字能写在刻度的居中位置,可以用类似下面的方法,其中TextWidth和TextHeight是求出给定文字在给定对象上的文字宽度和高度,只有得到此值才能将字写在准确位置。
For i = .l To .r Step st
s = Trim(Str(i)) ‘将要写的文字转换成字串并去掉空格
P0.CurrentX = i - P0.TextWidth(s) / 2 ‘居中对齐方式
P0.CurrentY = .t ‘写在显示区的顶部
P0.Print s;
Next i
★ 函数曲线主要是利用画直线的方法进行绘制,最左侧的点算出后,用Pset方法做出标记,以后每算出一个新的函数值,用Line-(x,y)画出一小段。直到画到显示范围的右侧。程序片段类下:
(说明:.l,.r是显示区间的左边和右边的x值,.res为显示分辨率,fx求函数值)
Picture1.PSet (.l, fx(fun1, .l)) ‘绘出初始点
For i = .l To .r Step (.r - .l) / .res ‘共.res段直线构成曲线
Picture1.Line -(i, fx(fun1, i)) ‘画出一小段
Next I
⑤参数设置的实现
为了使变量公用,在模块中用Public词句声明变量及自定义类型,这样在设置窗口的form_Load事件中就可以直接取得参数值了。
Private Sub Form_Load()
With Para
txtL = .l: txtPS = .ps * 100
txtCW = .cw: txtAW = .aw
BkColor.BackColor = .bc: AxisColor.BackColor = .ac
GridColor.BackColor = .gc: Fun1Color.BackColor = .cc1
End With
End Sub
参数设置支持确定和取消,如果确定,将会重新按新的设置来显示,否则,保持原显示不变,代码类下:
Private Sub cmdSettings_Click()
DispSettings.Show vbModal
If Para.ok Then DispFun
End Sub
参数设置的文本框处理较为简单,对于颜色的处理可以采用这样的方法(VB中的颜色可以存放在Long类型的变量中),下面示例了网格颜色的设置方法,其它雷同,其中的CD1是一个公共对话框控件(Common Dialog Control)
CD1.Color = GridColor.BackColor
CD1.ShowColor
Gri`Color.BackCklor = CD1.Color
四、主要技术问题描述:
设置图牆⡆的坐标范围用Scale方法,清除用Cls,作图用Line –(x,y),写字用Print(这些都是图片对象现成的可用方法,改笔宽用DrawWidth属性,色彩用ForeColmr和BackColor,至于窗口放大(可以接受图片的MouseDown和MouseUp事件以确定用户选择的窗口范围(VB会将鼠标点击时的x,y座标报告给过程),然后重新设置显示范围和坐标系,再重新计算绘图即可,缩放和平移都是更改显示范围然后重绘即可。
为了处理参数方便,可以自定义类似于下面的自定义数据类型
Type Settings
l As Double 'left
cc1 As Long 'curve 1 color
…
End Type
这样,象放大缩小这样的操作就可以按这样的方法来处理了:
Dim Para as Settings
‘在Form_Load和其它相关过程中已经正确的设置了Para中的各参数
Private Sub cmdZoomOut_Click()
With Para
.l = .l * .zs: .r = .r * .zs: .t = .t * .zs: .b = .b * .zs
End With
DispFun ‘按新的参数显示图形
End Sub
--------------------编程问答-------------------- 没看到图。 --------------------编程问答-------------------- http://community.csdn.net/IndexPage/SmartQuestion.aspx#homework --------------------编程问答-------------------- upupupupupupupupupupupupupupupupupup --------------------编程问答-------------------- 哎我的vb呀! --------------------编程问答-------------------- 谁能帮帮我?我先谢了!
--------------------编程问答-------------------- 我有图!能帮帮忙吗 --------------------编程问答-------------------- 报价了报价了. --------------------编程问答-------------------- 楼主现有结果木有,求答案。。。。。
补充:VB , 网络编程