| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6362 人关注过本帖, 5 人收藏
标题:真心求教,用VB实现动态曲线的绘制,总是有问题
只看楼主 加入收藏
nql_neu
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-1
收藏
得分:0 
回复 9楼 lowxiong
伟大的楼主,我咋给你分数啊,我第一次发帖,以前没有操作过这些东西
2014-04-01 16:58
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:0 
无所谓
2014-04-01 17:00
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:1 
晚上才上来。
我以前发过一个动态折线的程序,你可以找一找看一下。

授人于鱼,不如授人于渔
早已停用QQ了
2014-04-01 21:01
nql_neu
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-1
收藏
得分:0 
回复 13楼 风吹过b
好的,多谢朋友
2014-04-02 09:34
nql_neu
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-1
收藏
得分:0 
回复 12楼 lowxiong
楼主,我今天发现这个程序还是有点小问题,画前120个数的时候最右侧的直线一直在最picturebox的右上角,感觉不对吧,后120个数就正常了,什么原因呢?
2014-04-02 09:36
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:0 
回复 15楼 nql_neu
稍微修改了下程序,看下是否OK
1. 界面只显示31个采样,所以每次重画只画31个点
2. 采样值和List1的值一一对应,py(0)=List1(0)
3. 采样数量超过900自动停止采样,List1数值超过900自动停止添加新值

程序代码:
Dim px(121) As Single, py(121) As Single '用来保存曲线数据的坐标值,程序中实时曲线通道为3.
Dim col As Integer             '当前需绘制的点数
Dim pl As Integer          '判断是否画动态曲线
Dim num As Integer

Private Sub Command1_Click()
If col > 900 Then
    MsgBox "超出采样数量!", vbExclamation, "提示"
    Exit Sub
End If
Timer2.Enabled = True
If Timer1.Enabled = True Then
    Command1.Caption = "开始"
    Timer1.Enabled = False
Else
    Command1.Caption = "暂停"
    Timer1.Enabled = True
End If
End Sub

Private Sub Command2_Click()
End
End Sub

Private Sub Command3_Click()
Timer2.Enabled = False
End Sub

Private Sub Form_Load()
HScroll1.value = 900
Picture1.Scale (900, 0)-(1200, 300)    '设置绘图区域坐标
col = 0
pl = 0
num = 0
End Sub

Private Sub HScroll1_Change()
Picture1.Cls    '清空绘图区域
num = HScroll1.value              '使绘图区域坐标和滚动条对应
'Picture1.Scale (900 - (900 - num), 0)-(1200 - (900 - num), 300)
If pl >= 2 Then
    Picture1.PSet (px(0), py(0))
    For i = 0 To 30
        px(i) = 900 + i * 10
        py(i) = IIf(num < 31, Val(List1.List(i)), Val(List1.List(num - 30 + i)))
        Picture1.Line -(px(i), py(i)), QBColor(2) ' 重绘曲线
    Next i
End If
End Sub

Private Sub Timer1_Timer()
Picture1.Cls
If col > List1.ListCount Then
    MsgBox "采样数量超出列表数量!", vbExclamation, "Error"
    Timer1.Enabled = False
    Command1.Caption = "开始"
    Exit Sub
End If
If col < 31 Then
    For i = 0 To col
        px(i) = 900 + i * 10
        py(i) = Val(List1.List(i))       '利用随机数模拟实际数据
    Next i
    col = col + 1
    pl = pl + 1
ElseIf col <= 900 Then
    For i = 0 To 30
        py(i) = Val(List1.List(col - 30 + i))
        px(i) = 900 + i * 10
    Next i
    col = col + 1
Else
    Timer1.Enabled = False
    Command1.Caption = "开始"
End If

If pl >= 2 Then     '在两个或两个以上的数据点时,开始画动态曲线
    Picture1.PSet (px(0), py(0))
    For i = 0 To 30
        Picture1.Line -(px(i), py(i)), QBColor(2)
    Next i
    HScroll1.value = col
End If
End Sub

Private Sub Timer2_Timer()
Dim value As Integer

 Randomize

 value = Int(200 * Rnd + 100)

 List1.AddItem value

 If List1.ListCount > 900 Then
    Timer2.Enabled = False
End If
End Sub


[ 本帖最后由 owenlu1981 于 2014-4-2 11:44 编辑 ]
2014-04-02 10:45
nql_neu
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-1
收藏
得分:0 
回复 16楼 owenlu1981
楼主,你修改完的代码可以用,但是刚开始绘图的时候还是有问题,你可以把我的附件下载下来,把你修改的代码运行一下,希望能帮帮我,谢谢!
2014-04-02 11:08
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
你是 单条曲线,还是 多条曲线??

如果单条曲线,直接套的我 函数就是了。
https://bbs.bccn.net/thread-306299-1-1.html

里面有接口,注释。
    Call ADD数据(Time, 当前数据)
    Call 绘折线图(Picture1)

授人于鱼,不如授人于渔
早已停用QQ了
2014-04-02 11:25
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
测试了你的代码,没多大问题

改了你一个过程,120个点,很正确啊。

Private Sub Timer2_Timer()
Dim value As Integer
 Randomize                        '此行命令,在 load 过程中执行一次就可以了。
 value = Int(200 * Rnd + 100)
 If List1.ListCount > 120 Then    '你绘图函数里,限制数据 120个,那么 LIST 里,只保存最后的 120个数据。
    List1.RemoveItem 0            '干掉第一个数据
End If
 List1.AddItem value              '再添加新的数据
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2014-04-02 11:36
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:0 
最右侧的直线一直在最picturebox的右上角
--> 这个效果不对吗? 需要什么效果?
2014-04-02 11:43
快速回复:真心求教,用VB实现动态曲线的绘制,总是有问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.100003 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved