vb点虐 模拟直线方程 vb直线控件

用VB编写,根据六组坐标数据能自动拟合一条直线,并且显示在窗体中,包括表达式

不考虑厘米和毫米的转换,

目前创新互联建站已为近1000家的企业提供了网站建设、域名、虚拟空间、成都网站托管、企业网站设计、衡山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

添加PictureBox控件,假设X一列的Text控件是 名为Text1(0 to 5)的控件数组,

Y一列数是  名为Text2(0~5)的控件数组:

Private Sub Command1_Click()

'注:最小二乘法拟合y=ax+b直线的系数a,b分别为:

'设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     '用来设置PictureBox控件的坐标Scale

Dim aa As Single, bb As Single

Dim A, B, C, D

n = 6       '初始化数据

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)

'设置PictureBox坐标,并画直线及6个点:

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

VB中怎么用LINE方法画直线方程?

Line 方法 画直线和矩形

语法

object.Line [Step] (x1, 1) [Step] (x2, y2), [color], [B][F]

Line 方法的语法有以下对象限定符和部分:

部分 描述

object 可选的。 对象表达式,其值为“应用于”列表中的对象。如果object 省略,具有焦点的窗体作为object。

Step 可选的。关键字,指定起点坐标,它们相对于由 CurrentX 和 CurrentY 属性提供的当前图形位置。

(x1, y1) 可选的。Single (单精度浮点数),直线或矩形的起点坐标。ScaleMode 属性决定了使用的度量单位。如果省略,线起始于由 CurrentX 和 CurrentY 指示的位置。

Step 可选的。关键字,指定相对于线的起点的终点坐标。

(x2, y2) 必需的。Single (单精度浮点数),直线或矩形的终点坐标。

color 可选的。Long (长整型数),画线时用的 RGB 颜色。如果它被省略,则使用 ForeColor 属性值。可用 RGB 函数或 QBColor 函数指定颜色。

B 可选的。如果包括,则利用对角坐标画出矩形。

F 可选的。如果使用了 B 选项,则 F 选项规定矩形以矩形边框的颜色填充。不能不用 B 而用 F。如果不用 F 光用 B,则矩形用当前的 FillColor 和 FillStyle 填充。FillStyle 的缺省值为 transparent。

说明

画联结的线时,前一条线的终点就是后一条线的起点。

线的宽度取决于 DrawWidth 属性值。在背景上画线和矩形的方法取决于 DrawMode 和 DrawStyle 属性值。

执行 Line 方法时, CurrentX 和 CurrentY 属性被参数设置为终点。

这个方法不能用于With...End With 语句块。

VB.Net中画直线问题

不想整个重画,最好用单色的背景,例如黑色,线条是白色的

用变量把线条的内容备份

当想改变线条的位置或者长度之前,先用存下来的变量以黑色重画一次,覆盖原来的白色线条

然后再画新的白色线条,这种重画方法比较节省资源

假如需要用花哨的背景或者图片当背景,也可以用局部重回的方式。

代码就不提供了,只提供思路。

vb中如何根据一个坐标和斜率编直线方程

知坐标(x0,y0)和斜率k

则有y0=kx0+b,=  b=y0-kx0

所以 方程为 y=kx+(y0-kx0)

要在VB中画出方程图像来,就有点复杂了。以下是代码。部分代码参考网络。已经标注清楚

控件部分:三个文本,两个按键,一个picture,全部不改名。

文本1输入斜率,文本2输入X0,文本3输入Y0。按钮1作图。按钮2清空所作图形。保持坐标轴。如果对VB的坐标轴有疑问,请查阅百度或其它资料。

以下是全部代码:

Const Pi = 3.1415926535 '定义圆周率

Dim a, wor '定义用于在Picture1上的一个位置打印字符函数

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

'以下坐标代码“借”自 《自己动手做一个数学函数作图器》

'出处:电脑爱好者 2004年02月14日 作者:陈新新 责任编辑:zwg

'

Private Function DrawDot(Px, Py, Color) '定义画点函数

Picture1.PSet (Px, Py), Color

End Function

Sub XY() '建立直角坐标系

Picture1.DrawWidth = 1 '设置线条宽度

Picture1.Cls '设定用户坐标系,坐标原点在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=" '对斜率为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

附运行图


当前文章:vb点虐 模拟直线方程 vb直线控件
文章路径:http://scyanting.com/article/ddesgdo.html