Dim s As LongPrivate Sub Command1_Click() s = s + 1 drawit s, 0, QBColor(s Mod 15) End Sub Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long) Picture1.Scale (0, 0.05)-(1000, 0) For i = 10 To 1000 Step 10 Picture1.PSet (i, (a / i + k)), color Next End Sub
要做到平滑不容易啊修改了一下 northwolves(野性的呼唤)的程序,看看行不行: Dim s As Long Private Sub Command1_Click() s = s + 1 drawit s, 0, QBColor(s Mod 15) End Sub Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long) Picture1.Scale (0, 0.0005)-(100000, 0) Picture1.PSet (10, (a / 10 + k)), color For i = 10 To 100000 Step 10 Picture1.Line -(i, (a / i + k)), color 'Picture1.PSet (i, (a / i + k)), color Next End Subpicturebox最好做得尽可能地大。。
但是图像不能保存啊!也就是说当窗体间进行切换后,图像就不在了!或者当把picturebox的一半移出电脑屏幕后再移回来,移出去的部分所绘出的图形也就不在了!我是想在窗体切换之后图像还保留在picturebox中!这怎么解决啊?? ============================== 不是吧,连这个也问最重要地是你满不满意上面代码的效果,如果勉强可以接受那么就加几句: Dim s As Long Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long) Picture1.Scale (0, 0.0005)-(100000, 0) Picture1.PSet (10, (a / 10 + k)), color For i = 10 To 100000 Step 10 Picture1.Line -(i, (a / i + k)), color 'Picture1.PSet (i, (a / i + k)), color Next End SubPrivate Sub Form_Load() Me.WindowState = 2 Me.Show Picture1.Left = 0 Picture1.Top = 0 Picture1.Width = Me.Width Picture1.Height = Me.Height Picture1.AutoRedraw = True End SubPrivate Sub Picture1_Click() s = s + 1 drawit s, 0, QBColor(s Mod 15) End Sub取消了command,每次单击picturebox就画一条线
Scale不是有两个参数吗(x1, y1) - (x2, y2) (x1, y1)左上角的水平和垂直坐标 (x2, y2)右下角的水平和垂直坐标 你完全可以根据对角线的两点算出中点(把它作为新的坐标) 然后在新坐标中y= a * 1/x + k
还有就是为什么i要从10to 100000呢??
留言收到,其实昨晚已试了试,但中途有事就放下了。。哦!明白一点了!那再问一下,Picture1.Scale (0, 0.0005)-(100000, 0)中0.0005和100000是怎么算出来的? 还有就是为什么i要从10to 100000呢?? ======================================= 不是算出来的,是随手定的,目的是尽量画多点线,这样平滑的效果会好些。Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long) Picture1.Scale (0, 0.0005)-(100000, 0) Picture1.PSet (10, (a / 10 + k)), color For i = 20 To 100000 Step 10 Picture1.Line -(i, (a / i + k)), color 'Picture1.PSet (i, (a / i + k)), color Next End SubPrivate Sub Form_Load() Me.WindowState = 2 Me.Show Picture1.Left = 0 Picture1.Top = 0 Picture1.Width = Me.Width Picture1.Height = Me.Height Picture1.AutoRedraw = True End SubPrivate Sub Picture1_Click() 'Dim a As Double 'Dim k As Double a = InputBox("请输入a的值:") k = InputBox("请输入k的值:") If IsNumeric(a) And IsNumeric(k) Then drawit a, k, QBColor(a Mod 15) End If End Sub如果你要同时输入a和k的值,上面的代码可能要注意a和k的取值,例如,如果a=4,那么在我的机子里k要到0.00005才见到效果,k=0.0005时在屏幕上就看不到效果了,因为画了到屏幕外面去了如果不要这么小的值可以改上面的为: Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long) Picture1.Scale (0, 0.05)-(1000, 0) Picture1.PSet (10, (a / 10 + k)), color For i = 20 To 1000 Step 10 Picture1.Line -(i, (a / i + k)), color 'Picture1.PSet (i, (a / i + k)), color Next End Sub那么a=4,k=0.005就看到效果了,怎么修改看你具体情况
s = s + 1
drawit s, 0, QBColor(s Mod 15)
End Sub
Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long)
Picture1.Scale (0, 0.05)-(1000, 0)
For i = 10 To 1000 Step 10
Picture1.PSet (i, (a / i + k)), color
Next
End Sub
daisy8675(莫依) 好的,我等你!
Dim s As Long
Private Sub Command1_Click()
s = s + 1
drawit s, 0, QBColor(s Mod 15)
End Sub
Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long)
Picture1.Scale (0, 0.0005)-(100000, 0)
Picture1.PSet (10, (a / 10 + k)), color
For i = 10 To 100000 Step 10
Picture1.Line -(i, (a / i + k)), color
'Picture1.PSet (i, (a / i + k)), color
Next
End Subpicturebox最好做得尽可能地大。。
自己实在搞不定才
你的那个我就不信你自己搞不定!
参考一下MSDN的 Picture。Scale吧!
==============================
不是吧,连这个也问最重要地是你满不满意上面代码的效果,如果勉强可以接受那么就加几句:
Dim s As Long
Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long)
Picture1.Scale (0, 0.0005)-(100000, 0)
Picture1.PSet (10, (a / 10 + k)), color
For i = 10 To 100000 Step 10
Picture1.Line -(i, (a / i + k)), color
'Picture1.PSet (i, (a / i + k)), color
Next
End SubPrivate Sub Form_Load()
Me.WindowState = 2
Me.Show
Picture1.Left = 0
Picture1.Top = 0
Picture1.Width = Me.Width
Picture1.Height = Me.Height
Picture1.AutoRedraw = True
End SubPrivate Sub Picture1_Click()
s = s + 1
drawit s, 0, QBColor(s Mod 15)
End Sub取消了command,每次单击picturebox就画一条线
(x1, y1)左上角的水平和垂直坐标
(x2, y2)右下角的水平和垂直坐标
你完全可以根据对角线的两点算出中点(把它作为新的坐标)
然后在新坐标中y= a * 1/x + k
还有就是为什么i要从10to 100000呢??
=======================================
不是算出来的,是随手定的,目的是尽量画多点线,这样平滑的效果会好些。Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long)
Picture1.Scale (0, 0.0005)-(100000, 0)
Picture1.PSet (10, (a / 10 + k)), color
For i = 20 To 100000 Step 10
Picture1.Line -(i, (a / i + k)), color
'Picture1.PSet (i, (a / i + k)), color
Next
End SubPrivate Sub Form_Load()
Me.WindowState = 2
Me.Show
Picture1.Left = 0
Picture1.Top = 0
Picture1.Width = Me.Width
Picture1.Height = Me.Height
Picture1.AutoRedraw = True
End SubPrivate Sub Picture1_Click()
'Dim a As Double
'Dim k As Double
a = InputBox("请输入a的值:")
k = InputBox("请输入k的值:")
If IsNumeric(a) And IsNumeric(k) Then
drawit a, k, QBColor(a Mod 15)
End If
End Sub如果你要同时输入a和k的值,上面的代码可能要注意a和k的取值,例如,如果a=4,那么在我的机子里k要到0.00005才见到效果,k=0.0005时在屏幕上就看不到效果了,因为画了到屏幕外面去了如果不要这么小的值可以改上面的为:
Sub drawit(ByVal a As Double, ByVal k As Double, ByVal color As Long)
Picture1.Scale (0, 0.05)-(1000, 0)
Picture1.PSet (10, (a / 10 + k)), color
For i = 20 To 1000 Step 10
Picture1.Line -(i, (a / i + k)), color
'Picture1.PSet (i, (a / i + k)), color
Next
End Sub那么a=4,k=0.005就看到效果了,怎么修改看你具体情况