重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
。net 其实还是很好绘制图形的
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比广昌网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式广昌网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖广昌地区。费用合理售后完善,10年实体公司更值得信赖。
你可以看下 Graphics 类
Dim d As New Bitmap(Me.Width, Me.Height) ‘一个图片吧
Dim g As Graphics = Graphics.FromImage(d)’绘制 准备在这个图片是进行
然后 就是你绘制的东西了
线 就是 g.DrawLine()
圆 弧度 就用 g.DrawArc(Pens.Black, New Rectangle(0, 0, 400, 200), 0, 360)
复杂的就是 g.DrawBezier()
等 如果你用的是 VS的 编译 上面都有详细的参数说明
Dim d As New Bitmap(Me.Width, Me.Height)
Dim g As Graphics = Graphics.FromImage(d)
g.DrawArc(Pens.Black, New Rectangle(0, 0, 200, 200), 0, 360)
g.DrawLine(Pens.Red, New Point(0, 0), New Point(200, 200))
g.DrawLines(Pens.Green, New Point() {New Point(0, 0), New Point(50, 40), New Point(50, 80), New Point(90, 70), New Point(100, 400)})
g.DrawBezier(Pens.Yellow, New Point(0, 100), New Point(0, 0), New Point(200, 0), New Point(200, 200))
g.Dispose()
Me.BackgroundImage = d
先分析你的曲线特征,然后选择合适的函数进行拟合。
实现曲线拟合的方法大致可以分为两大类:
1.插值法,给定一组精确的离散数据点,构造一个函数,使其严格依次通过每个数据点,满足光滑的要求。常用的而又多项式插值,抛物样条曲线和三次样条曲线等。
2.逼近法,给定一组具有误差的离散数据点,构造一个函数,使其整体上接近这些数据点,而不必点点通过他们。常用的逼近法有最小二乘法,B样条曲线等
看你的曲线要求选择,找到合适的函数曲线自然就光滑了
构造Pen的时候可以指定粗细,如果你指定为1,并且放大了10倍,最后就成10了,所以你指定小点就行了,比如 Dim p As New Pen(Color.Black, 0.01) 最终绘制的线的粗细不会小于1
不引用的话,VB做不到。这事情要看VB的版本。如果是6.0的话,要去网上下载GDIPLUS的库文件或者自己声明GDI+的API。如果是VB.NET的话,VB自带GDI+,但是也可以下载GDIPLUS库来用。如果不知道去哪里下载,我下载有,你可以问我要。我使用VB6.0。下载gdiplus以后,在VB里面引用这个库,注意要选择“所有文件”才能看到这个库。gdi+里面的path功能可以实现样条:Private
TOKEN
As
Long'GDI+对象
Private
Graphics
As
Long'画板
Private
Sub
InitGDIPlus()
'初始化GDI+
Dim
uInput
As
GdiplusStartupInput
uInput.GdiplusVersion
=
1
If
GdiplusStartup(TOKEN,
uInput)
Ok
Then
'初始化错误
MsgBox
"GDI+
初始化错误。程序即将关闭。",
vbCritical,
"InitError"
End
End
If
GdipCreateFromHDC
Me.hDC,
Graphics'创建画板
GdipSetSmoothingMode
Graphics,
SmoothingModeAntiAlias'设置为反锯齿
End
SubPrivate
Sub
TerminateGDIPlus()
GdipDeleteGraphics
Graphics
'释放graphics占用的内存
GdiplusShutdown
TOKEN
'关闭GDI+
End
SubPrivate
Sub
Form_Load()
InitGDIPlus
'初始化End
SubPrivate
Sub
Command1_Click()
Dim
path
As
Long
Dim
m(3)
As
POINTF
'以下是坐标,你可以自由改变
m(0).x
=
m(0).y
=
m(1).x
=
10
m(1).y
=
100
m(2).x
=
20
m(2).y
=
3
m(3).x
=
500
m(3).y
=
100
Dim
pen
As
Long
GdipCreatePen1
HFF000000,
2,
UnitPixel,
pen
'创建画笔,用来画出样条
GdipCreatePath
FillModeAlternate,
path
'创建path
GdipAddPathBeziers
path,
m(0),
4
'创建样条'Count是说坐标的个数,points只能传递数组的第一个元素,不能传递数组。
GdipDrawPath
Graphics,
pen,
path
'画出样条
GdipDeletePen
pen
'删除画笔
GdipDeletePath
path
'删除样条End
SubPrivate
Sub
Form_Unload(Cancel
As
Integer)
TerminateGDIPlus
'删除GDI+
End
Sub
可以使用移动平均法,对前n个数求和取平均赋给下一个数,依次移动直到数据末尾,最后形成一新的数组z,最后plot(x,z)就行了,不过要注意n的取值要合适,推荐先取5-10之间的数吧。