。net ?其實(shí)還是很好繪制圖形的
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比廣昌網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式廣昌網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋廣昌地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。
你可以看下?Graphics ?類
Dim d As New Bitmap(Me.Width, Me.Height) ?‘一個(gè)圖片吧
? Dim g As Graphics = Graphics.FromImage(d)’繪制 ?準(zhǔn)備在這個(gè)圖片是進(jìn)行
然后 ?就是你繪制的東西了
線 就是 ??g.DrawLine()
圓 弧度 ?就用 ?g.DrawArc(Pens.Black, New Rectangle(0, 0, 400, 200), 0, 360)
復(fù)雜的就是 ? ? ?g.DrawBezier()
等 ?如果你用的是 VS的 ?編譯 ?上面都有詳細(xì)的參數(shù)說(shuō)明
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
先分析你的曲線特征,然后選擇合適的函數(shù)進(jìn)行擬合。
實(shí)現(xiàn)曲線擬合的方法大致可以分為兩大類:
1.插值法,給定一組精確的離散數(shù)據(jù)點(diǎn),構(gòu)造一個(gè)函數(shù),使其嚴(yán)格依次通過(guò)每個(gè)數(shù)據(jù)點(diǎn),滿足光滑的要求。常用的而又多項(xiàng)式插值,拋物樣條曲線和三次樣條曲線等。
2.逼近法,給定一組具有誤差的離散數(shù)據(jù)點(diǎn),構(gòu)造一個(gè)函數(shù),使其整體上接近這些數(shù)據(jù)點(diǎn),而不必點(diǎn)點(diǎn)通過(guò)他們。常用的逼近法有最小二乘法,B樣條曲線等
看你的曲線要求選擇,找到合適的函數(shù)曲線自然就光滑了
構(gòu)造Pen的時(shí)候可以指定粗細(xì),如果你指定為1,并且放大了10倍,最后就成10了,所以你指定小點(diǎn)就行了,比如 Dim p As New Pen(Color.Black, 0.01) 最終繪制的線的粗細(xì)不會(huì)小于1
不引用的話,VB做不到。這事情要看VB的版本。如果是6.0的話,要去網(wǎng)上下載GDIPLUS的庫(kù)文件或者自己聲明GDI+的API。如果是VB.NET的話,VB自帶GDI+,但是也可以下載GDIPLUS庫(kù)來(lái)用。如果不知道去哪里下載,我下載有,你可以問(wèn)我要。我使用VB6.0。下載gdiplus以后,在VB里面引用這個(gè)庫(kù),注意要選擇“所有文件”才能看到這個(gè)庫(kù)。gdi+里面的path功能可以實(shí)現(xiàn)樣條:Private
TOKEN
As
Long'GDI+對(duì)象
Private
Graphics
As
Long'畫板
Private
Sub
InitGDIPlus()
'初始化GDI+
Dim
uInput
As
GdiplusStartupInput
uInput.GdiplusVersion
=
1
If
GdiplusStartup(TOKEN,
uInput)
Ok
Then
'初始化錯(cuò)誤
MsgBox
"GDI+
初始化錯(cuò)誤。程序即將關(guān)閉。",
vbCritical,
"InitError"
End
End
If
GdipCreateFromHDC
Me.hDC,
Graphics'創(chuàng)建畫板
GdipSetSmoothingMode
Graphics,
SmoothingModeAntiAlias'設(shè)置為反鋸齒
End
SubPrivate
Sub
TerminateGDIPlus()
GdipDeleteGraphics
Graphics
'釋放graphics占用的內(nèi)存
GdiplusShutdown
TOKEN
'關(guān)閉GDI+
End
SubPrivate
Sub
Form_Load()
InitGDIPlus
'初始化End
SubPrivate
Sub
Command1_Click()
Dim
path
As
Long
Dim
m(3)
As
POINTF
'以下是坐標(biāo),你可以自由改變
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
'創(chuàng)建畫筆,用來(lái)畫出樣條
GdipCreatePath
FillModeAlternate,
path
'創(chuàng)建path
GdipAddPathBeziers
path,
m(0),
4
'創(chuàng)建樣條'Count是說(shuō)坐標(biāo)的個(gè)數(shù),points只能傳遞數(shù)組的第一個(gè)元素,不能傳遞數(shù)組。
GdipDrawPath
Graphics,
pen,
path
'畫出樣條
GdipDeletePen
pen
'刪除畫筆
GdipDeletePath
path
'刪除樣條End
SubPrivate
Sub
Form_Unload(Cancel
As
Integer)
TerminateGDIPlus
'刪除GDI+
End
Sub
可以使用移動(dòng)平均法,對(duì)前n個(gè)數(shù)求和取平均賦給下一個(gè)數(shù),依次移動(dòng)直到數(shù)據(jù)末尾,最后形成一新的數(shù)組z,最后plot(x,z)就行了,不過(guò)要注意n的取值要合適,推薦先取5-10之間的數(shù)吧。