扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
不考虑厘米和毫米的转换,
目前创新互联建站已为近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
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 语句块。
不想整个重画,最好用单色的背景,例如黑色,线条是白色的
用变量把线条的内容备份
当想改变线条的位置或者长度之前,先用存下来的变量以黑色重画一次,覆盖原来的白色线条
然后再画新的白色线条,这种重画方法比较节省资源
假如需要用花哨的背景或者图片当背景,也可以用局部重回的方式。
代码就不提供了,只提供思路。
知坐标(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
附运行图
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流