导航
  • 全部
...

那位大哥大姐来救急啊!关于picturebox画曲线的问题!在线等,问题一解决就给分

lilinjian2001 2004-05-07 04:46:26
小弟我想在picturebox中画多条曲线!曲线表达式为y = a * 1/x + k其中x为变量!要求:以picturebox的左下角为顶点,只画第一象限的图,每次输入不同的a和k时,就画一条曲线,并且前面的曲线不会被清除。横坐标以10递增,纵坐标以0.05递增。

问题一解决就给分!如果不够再加都可以!请各位大哥大姐一定要帮帮小弟我呀!
...全文
给本帖投票
244 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilinjian2001 2004-05-08
  • 打赏
  • 举报
回复
哦!明白一点了!那再问一下,Picture1.Scale (0, 0.0005)-(100000, 0)中0.0005和100000是怎么算出来的?

还有就是我是要输入输入不同的a 和k来画这条曲线,输入一次画一条就可以了!
谢紫枫 2004-05-08
  • 打赏
  • 举报
回复
留言方便学习用
^_^
lilinjian2001 2004-05-08
  • 打赏
  • 举报
回复
I Know!非常感谢!!我再研究一下先,如果有什么问题,我发短信给你!谢谢了
ryuginka 2004-05-08
  • 打赏
  • 举报
回复
up
lsftest 2004-05-08
  • 打赏
  • 举报
回复
留言收到,其实昨晚已试了试,但中途有事就放下了。。

哦!明白一点了!那再问一下,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 Sub

Private 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 Sub

Private 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就看到效果了,怎么修改看你具体情况。。。


lilinjian2001 2004-05-08
  • 打赏
  • 举报
回复
还有就是为什么i要从10to 100000呢??
broown 2004-05-08
  • 打赏
  • 举报
回复
Scale不是有两个参数吗(x1, y1) - (x2, y2)
(x1, y1)左上角的水平和垂直坐标
(x2, y2)右下角的水平和垂直坐标
你完全可以根据对角线的两点算出中点(把它作为新的坐标)
然后在新坐标中y= a * 1/x + k
lsftest 2004-05-07
  • 打赏
  • 举报
回复
但是图像不能保存啊!也就是说当窗体间进行切换后,图像就不在了!或者当把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 Sub

Private 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 Sub

Private Sub Picture1_Click()
s = s + 1
drawit s, 0, QBColor(s Mod 15)
End Sub

取消了command,每次单击picturebox就画一条线。。。
yenight 2004-05-07
  • 打赏
  • 举报
回复
把你的Picture.AutoReDraw属性设置成True就可以了!
boywhp 2004-05-07
  • 打赏
  • 举报
回复
这些东西自己搞定哪!不要什么问题自己都没什么想,就依靠别人!
自己实在搞不定才。。。
你的那个我就不信你自己搞不定!
参考一下MSDN的 Picture。Scale吧!
lilinjian2001 2004-05-07
  • 打赏
  • 举报
回复
但是图像不能保存啊!也就是说当窗体间进行切换后,图像就不在了!或者当把picturebox的一半移出电脑屏幕后再移回来,移出去的部分所绘出的图形也就不在了!我是想在窗体切换之后图像还保留在picturebox中!这怎么解决啊??
lsftest 2004-05-07
  • 打赏
  • 举报
回复
要做到平滑不容易啊。。。修改了一下 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 Sub

picturebox最好做得尽可能地大。。。。。
zh4073 2004-05-07
  • 打赏
  • 举报
回复
横坐标以10递增,纵坐标以0.05递增,画平滑连接可不容易!
lilinjian2001 2004-05-07
  • 打赏
  • 举报
回复
楼上的,我想要平滑连接的,不要点画的!不过还是谢谢了,但是每次点际后画的图要一样啊!!

--------------------------------------------------------------------------------
daisy8675(莫依) 好的,我等你!
northwolves 2004-05-07
  • 打赏
  • 举报
回复
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.05)-(1000, 0)
For i = 10 To 1000 Step 10
Picture1.PSet (i, (a / i + k)), color
Next
End Sub
daisy8675 2004-05-07
  • 打赏
  • 举报
回复
不是不幫你,是我自己的程序沒有寫完,我剛被boss問話,我剛答應明天給他回分析資料,現在在趕....

你得等等,我真的沒有時間,你如果明天要,我可以來寫一個
mxfeng 2004-05-07
  • 打赏
  • 举报
回复
我不会平滑连接,拉倒了!
以前还真看到过,唉
lilinjian2001 2004-05-07
  • 打赏
  • 举报
回复
daisy8675(莫依)姐姐,我知道你会!你就帮帮我吧!谢谢了
kite079 2004-05-07
  • 打赏
  • 举报
回复
up
daisy8675 2004-05-07
  • 打赏
  • 举报
回复
那up吧。現在沒有空
加载更多回复(3)

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部