不考慮厘米和毫米的轉(zhuǎn)換,
目前創(chuàng)新互聯(lián)建站已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、衡山網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
添加PictureBox控件,假設(shè)X一列的Text控件是 名為Text1(0 to 5)的控件數(shù)組,
Y一列數(shù)是 ?名為Text2(0~5)的控件數(shù)組:
Private?Sub?Command1_Click()
'注:最小二乘法擬合y=ax+b直線的系數(shù)a,b分別為:
'設(shè)A=∑xi^2,B=∑xi,C=∑yixi,D=∑yi,則方程化為:
'Aa?BB?=?C
'Ba?nb?=?D
'解出a?,?b得:
'a?=?(Cn?-?BD)?/?(An?-?BB)
'b?=?(AD?-?CB)?/?(An?-?BB)
Dim?minX,?maxX,?minY,?maxY?As?Single?????'用來設(shè)置PictureBox控件的坐標(biāo)Scale
Dim?aa?As?Single,?bb?As?Single
Dim?A,?B,?C,?D
n?=?6???????'初始化數(shù)據(jù)
A?=?0:?B?=?0:?C?=?0:?D?=?0
minX?=?Val(Text1(0).Text):?maxX?=?minX
minY?=?Val(Text2(0).Text):?maxY?=?minY
For?i?=?0?To?5
A?=?A?+?Val(Text1(i).Text)?^?2
B?=?B?+?Val(Text1(i).Text)
C?=?C?+?Val(Text1(i).Text)?*?Val(Text2(i).Text)
D?=?D?+?Val(Text2(i).Text)
If?Val(Text1(i).Text)??minX?Then?minX?=?Val(Text1(i).Text)
If?Val(Text1(i).Text)??maxX?Then?maxX?=?Val(Text1(i).Text)
If?Val(Text2(i).Text)??minY?Then?minY?=?Val(Text2(i).Text)
If?Val(Text2(i).Text)??maxY?Then?maxY?=?Val(Text2(i).Text)
Next?i
aa?=?(n?*?C?-?B?*?D)?/?(n?*?A?-?B?*?B)
bb?=?(A?*?D?-?C?*?B)?/?(n?*?A?-?B?*?B)
'設(shè)置PictureBox坐標(biāo),并畫直線及6個(gè)點(diǎn):
With?Picture1
.ScaleMode?=?0
.ScaleWidth?=?(maxX?-?minX)?*?1.4
.ScaleHeight?=?-(maxY?-?minY)?*?1.4
.ScaleLeft?=?minX?-?(maxX?-?minX)?/?5
.ScaleTop?=?maxY?+?(maxY?-?minY)?/?5
End?With
Picture1.Line?(minX,?aa?*?minX?+?bb)-(maxX,?aa?*?maxX?+?bb)
For?i?=?0?To?5
Picture1.Circle?(Val(Text1(i).Text),?Val(Text2(i).Text)),?(maxX?-?minX)?/?100,?RGB(255,?0,?0)
Next?i
Picture1.CurrentX?=?Picture1.ScaleLeft:?Picture1.CurrentY?=?Picture1.ScaleTop
Picture1.Print?"y="??aa??"*x?+?"??bb
End?Sub
Line 方法 畫直線和矩形
語法
object.Line [Step] (x1, 1) [Step] (x2, y2), [color], [B][F]
Line 方法的語法有以下對(duì)象限定符和部分:
部分 描述
object 可選的。 對(duì)象表達(dá)式,其值為“應(yīng)用于”列表中的對(duì)象。如果object 省略,具有焦點(diǎn)的窗體作為object。
Step 可選的。關(guān)鍵字,指定起點(diǎn)坐標(biāo),它們相對(duì)于由 CurrentX 和 CurrentY 屬性提供的當(dāng)前圖形位置。
(x1, y1) 可選的。Single (單精度浮點(diǎn)數(shù)),直線或矩形的起點(diǎn)坐標(biāo)。ScaleMode 屬性決定了使用的度量單位。如果省略,線起始于由 CurrentX 和 CurrentY 指示的位置。
Step 可選的。關(guān)鍵字,指定相對(duì)于線的起點(diǎn)的終點(diǎn)坐標(biāo)。
(x2, y2) 必需的。Single (單精度浮點(diǎn)數(shù)),直線或矩形的終點(diǎn)坐標(biāo)。
color 可選的。Long (長整型數(shù)),畫線時(shí)用的 RGB 顏色。如果它被省略,則使用 ForeColor 屬性值??捎?RGB 函數(shù)或 QBColor 函數(shù)指定顏色。
B 可選的。如果包括,則利用對(duì)角坐標(biāo)畫出矩形。
F 可選的。如果使用了 B 選項(xiàng),則 F 選項(xiàng)規(guī)定矩形以矩形邊框的顏色填充。不能不用 B 而用 F。如果不用 F 光用 B,則矩形用當(dāng)前的 FillColor 和 FillStyle 填充。FillStyle 的缺省值為 transparent。
說明
畫聯(lián)結(jié)的線時(shí),前一條線的終點(diǎn)就是后一條線的起點(diǎn)。
線的寬度取決于 DrawWidth 屬性值。在背景上畫線和矩形的方法取決于 DrawMode 和 DrawStyle 屬性值。
執(zhí)行 Line 方法時(shí), CurrentX 和 CurrentY 屬性被參數(shù)設(shè)置為終點(diǎn)。
這個(gè)方法不能用于With...End With 語句塊。
不想整個(gè)重畫,最好用單色的背景,例如黑色,線條是白色的
用變量把線條的內(nèi)容備份
當(dāng)想改變線條的位置或者長度之前,先用存下來的變量以黑色重畫一次,覆蓋原來的白色線條
然后再畫新的白色線條,這種重畫方法比較節(jié)省資源
假如需要用花哨的背景或者圖片當(dāng)背景,也可以用局部重回的方式。
代碼就不提供了,只提供思路。
知坐標(biāo)(x0,y0)和斜率k
則有y0=kx0+b,=??b=y0-kx0
所以?方程為?y=kx+(y0-kx0)
要在VB中畫出方程圖像來,就有點(diǎn)復(fù)雜了。以下是代碼。部分代碼參考網(wǎng)絡(luò)。已經(jīng)標(biāo)注清楚
控件部分:三個(gè)文本,兩個(gè)按鍵,一個(gè)picture,全部不改名。
文本1輸入斜率,文本2輸入X0,文本3輸入Y0。按鈕1作圖。按鈕2清空所作圖形。保持坐標(biāo)軸。如果對(duì)VB的坐標(biāo)軸有疑問,請(qǐng)查閱百度或其它資料。
以下是全部代碼:
Const?Pi?=?3.1415926535?'定義圓周率
Dim?a,?wor?'定義用于在Picture1上的一個(gè)位置打印字符函數(shù)
Private?Function?PrintWord(x,?y,?Word?As?String)
With?Picture1
.CurrentX?=?x
.CurrentY?=?y
.ForeColor?=?RGB(0,?0,?255)
End?With
Picture1.Print?Word
End?Function
'以下坐標(biāo)代碼“借”自?《自己動(dòng)手做一個(gè)數(shù)學(xué)函數(shù)作圖器》
'出處:電腦愛好者?2004年02月14日?作者:陳新新?責(zé)任編輯:zwg
'
Private?Function?DrawDot(Px,?Py,?Color)?'定義畫點(diǎn)函數(shù)
Picture1.PSet?(Px,?Py),?Color
End?Function
Sub?XY()?'建立直角坐標(biāo)系
Picture1.DrawWidth?=?1?'設(shè)置線條寬度
Picture1.Cls?'設(shè)定用戶坐標(biāo)系,坐標(biāo)原點(diǎn)在Picture1中心
Picture1.Scale?(-10,?10)-(10,?-10)
Picture1.Line?(-10,?0)-(10,?0),?RGB(0,?0,?255)
Picture1.Line?-(9.5,?0.5),?RGB(0,?0,?255)
Picture1.Line?(10,?0)-(9.5,?-0.5),?RGB(0,?0,?255)
Picture1.ForeColor?=?RGB(0,?0,?255)
Picture1.Print?"X"?'畫?X?軸
Picture1.Line?(0,?-10)-(0,?10),?RGB(0,?0,?255)
Picture1.Line?-(0.5,?9.5),?RGB(0,?0,?255)
Picture1.Line?(0,?10)-(-0.5,?9.5),?RGB(0,?0,?255)
Picture1.Print?"Y"?'畫?Y?軸
For?lin?=?-9?To?9
Picture1.Line?(lin,?0)-(lin,?0.25)
wor?=?PrintWord(lin?-?0.5,?-0.5,?Str(lin))
Picture1.Line?(0,?lin)-(-0.25,?lin)
If?lin??0?Then
wor?=?PrintWord(-0.9,?lin,?Str(lin))
End?If
Next?lin
Picture1.DrawWidth?=?2
End?Sub
Private?Sub?Command2_Click()?'清空
XY
End?Sub
Private?Sub?Form_Load()
Me.Show
Me.AutoRedraw?=?True
Picture1.BackColor?=?vbWhite
XY
End?Sub
'以上代碼摘自?
Private?Sub?Form_Resize()
Picture1.Width?=?Me.Width?*?0.9
Picture1.AutoRedraw?=?True
End?Sub
Private?Sub?Command1_Click()
Dim?x,?y,?x0,?y0,?k
Dim?b
k?=?Val(Text1.Text)
y0?=?Val(Text3.Text)
x0?=?Val(Text2.Text)
b?=?y0?-?k?*?x0
Dim?fangq?As?String
fangq?=?"直線:y="??Str(k)??"x"
If?k?=?0?Then?fangq?=?"直線:y="?'對(duì)斜率為0的情況作出處理。
If?b?=?0?Then
fangq?=?fangq??"+"??Str(b)
Else
fangq?=?fangq??Str(b)
End?If
For?x?=?-8?To?8?Step?Pi?/?6000????'作直線
Dot?=?DrawDot(x,?k?*?x?+?b,?RGB(255,?255,?0))
Next?x
If?Not?k?=?0?Then??????'輸出名稱
wor?=?PrintWord(-b?/?k?-?2,?2,?fangq)
Else
wor?=?PrintWord(5,?b,?fangq)
End?If
End?Sub
附運(yùn)行圖