注册 登录
编程论坛 VB6论坛

萌新想问下, 我的代码,,哪里错了

qq67078954 发布于 2017-03-17 12:49, 1768 次点击
Option Base 1

Private Sub guanghua1()
Dim x1!, y1!, x2%, y2!, a As Variant, j%, b%(42), i%
    a = Array(86, 87,86, 82, 67, 61, 59, 86, 77, 76, 99, 108, 169, _
                       151, 243, 274, 347, 417, 547, 735, 814, 820, 1051, 1091, 1142, _
                       1127, 1012, 940, 810, 705, 593, 431, 346, 239, 192, 130, 95, 53, 32, 14, 11, 7)
    Picture1.Cls
    Picture1.DrawStyle = 0
    x1 = 200: y1 = Picture1.ScaleHeight - 200
    x2 = Picture1.ScaleWidth - 200: y2 = 200
    Picture1.Line (x1, y1)-(x2, y1)         'x
    Picture1.Line (x1, y2)-(x1, y1)         'y
    For j = 1 To 42
        b(j) = 129 + i
    Next j
   For i = 1 To 42
     Picture1.PSet (b(i), a(i)), vbRed
   Next i
   顺便在问一下 ,图片框里给定的坐标系上打出 b(i),a(i) 绘出函数图像啊!。。。。啊啊啊 啊啊想了好久,,,

[此贴子已经被作者于2017-3-17 14:45编辑过]

12 回复
#2
qq670789542017-03-17 13:03
a a a == =求救啊啊啊
#3
风吹过b2017-03-17 15:09
初步看了一下,发现三个问题。
1、坐标刻度的问题。
你没有说明你的单位是什么,我就当默认是 缇,在正常分辨率下,1像素=15缇。所以你的 Y轴就在一根线上面。

2、坐标系的问题
你没有说明你的坐标系是什么,也没有命令调整坐标系,那么默认情况下,原点位于 左上角 ,数值越大,越向下或向右偏移。

3、代码一个错误。
    For j = 1 To 42
        b(j) = 129 + i
    Next j

这个 i 的值是多少?上下文都没体现,估计你是写错了。

初步就看到这三个问题。




[此贴子已经被作者于2017-3-17 15:17编辑过]

#4
风吹过b2017-03-17 15:17
Private Sub guanghua1()
Dim x1!, y1!, x2%, y2!, a As Variant, j%, b%(42), i%
    a = Array(86, 87, 86, 82, 67, 61, 59, 86, 77, 76, 99, 108, 169, _
                       151, 243, 274, 347, 417, 547, 735, 814, 820, 1051, 1091, 1142, _
                       1127, 1012, 940, 810, 705, 593, 431, 346, 239, 192, 130, 95, 53, 32, 14, 11, 7)
    Picture1.Cls
    Picture1.DrawStyle = 0
    x1 = 200: y1 = Picture1.ScaleHeight - 200
    x2 = Picture1.ScaleWidth - 200: y2 = 200
    Picture1.Line (x1, y1)-(x2, y1)         'x
    Picture1.Line (x1, y2)-(x1, y1)         'y
    For j = 1 To 42
        b(j) = j * 5                        '每个点隔 多少像素
    Next j
   For i = 1 To 42
'     Picture1.PSet (b(i) * 15 + 200, y1 - a(i) * 15), vbRed        '画点, 200 ,左边距,y1,Y轴的0点位置 ,15,默认分辨率下的缇与像素换算比例
        Picture1.Circle (b(i) * 15 + 200, y1 - a(i) * 15), 30, vbRed        '画一个圆,代替一个点,可视范围更大一点
        If i > 1 Then       '用线连接前面的点
            Picture1.Line (b(i - 1) * 15 + 200, y1 - a(i - 1) * 15)-(b(i) * 15 + 200, y1 - a(i) * 15), vbRed
        End If
   Next i
End Sub
#5
qq670789542017-03-17 20:04
回复 3楼 风吹过b
如何调整坐标系啊? 那个  函数坐标我想画的是是 (130,0)-(171,1200)但是画图的时候发现不行要根据图像的位置来弄,第一次弄这个啊,不太懂,
那个129+i是写错了真实的想写的是加j, 画图的是我不懂怎么让点 呈现在坐标轴上啊,
那个b(j)是为了让他表示X轴, a(i)表示Y

[此贴子已经被作者于2017-3-17 20:36编辑过]

#6
qq670789542017-03-17 20:26
回复 4楼 风吹过b
我靠大神我要认真研究一下 毕竟还有好几个要写
大神我有一个问题
                 x1 = 200: y1 = Picture1.ScaleHeight - 200
                 x2 = Picture1.ScaleWidth - 200: y2 = 200
                 Picture1.Line (x1, y2)-(x1, y1)
这个为什么y1 和y2换位置 y轴都不变化啊


我靠,我想连接点与点之间的时候写的都是 简单的想line(b(i),a(i))-(b(i+1),a(i+1))怪不得话的奇怪 而且用着用着就会说我的X Y轴定义错误 无效
默认分辨率下的缇与像素换算比例 是因为?坐标要显示在 屏幕上都要*15吗?
只有本站会员才能查看附件,请 登录

啊我想化成这样还需要怎么修改?代码?刚刚复制粘贴的时候发现 就算把图片控件拉到超级长 还是没显示出 他的最高点
我思考一下实在不懂在来 问你吧,, 第一次VB画图。。。遇到很多问题
如果我画图的时候把图片放在VB上在用鼠标的点击记录他的坐标 收集在数组当中
然后 在图片框中画坐标
在窗口中打点
这样会简单点吗
#7
qq670789542017-03-17 20:35
回复 4楼 风吹过b
我靠真的是超级厉害!我刚刚修改了一下
            For j = 1 To 42
                    b(j) = j * 26             '每个点隔 多少像素
            Next j
            For i = 1 To 42
            'Picture1.PSet (b(i) * 15 + 200, y1 - a(i) * 8), vbRed        '画点, 200 ,左边距,y1,Y轴的0点位置 ,15,默认分辨率下的缇与像素换算比例
               Picture1.Circle (b(i) * 15 + 200, y1 - a(i) * 8), 30, vbRed        '画一个圆,代替一个点,可视范围更大一点
                    If i > 1 Then       '用线连接前面的点
                    Picture1.Line (b(i - 1) * 15 + 200, y1 - a(i - 1) * 8)-(b(i) * 15 + 200, y1 - a(i) * 8), vbRed
                    End If
            Next i
发现可以接近于我所放的图片!!! 我今天课有点多,,上的背疼,简单的看了下!明天我要仔细看大神你给的代码关于X,Y到底是怎么画上去的!好厉害的说感觉
#8
风吹过b2017-03-17 22:03
Y轴的值,你可以按 百分比计算不?
#9
ZHRXJR2017-03-18 19:46
程序代码:
  For j = 1 To 42
        b(j) = 129 + i
    Next j
   For i = 1 To 42
     Picture1.PSet (b(i), a(i)), vbRed
   Next i
'修改为:
  For j = 0 To 41
        b(j) = 129 + j
    Next j
   For i = 0 To 41
     Picture1.PSet (b(i), a(i)), vbRed
   Next i

a = Array(86, 87, 82, 67, 61, 59, 86, 77, 76, 99, 108, 169, _
                       151, 243, 274, 347, 417, 547, 735, 814, 820, 1051, 1091, 1142, _
                       1127, 1012, 940, 810, 705, 593, 431, 346, 239, 192, 130, 95, 53, 32, 14, 11, 7)
'a数组是(0 To 41)
#10
qq670789542017-03-21 20:28
回复 8楼 风吹过b
刚刚问了一个问题 ,但是后面自己 找到错误了,但是又不懂删除 回复表示 很尴尬

[此贴子已经被作者于2017-3-21 21:15编辑过]

#11
qq670789542017-03-30 20:54
回复 8楼 风吹过b
如果想每隔一秒打印一个点,怎么实现啊,
#12
风吹过b2017-03-30 22:47
1秒打一个点,需要使用定时器,并且在多个控件的事件中响应程序的执行
建议你参考一下本版的精华贴。在外面手机上网不方便找。
你只是定时把数据压进去就差不多了。有一个函数指之最大值最小值要修改一下。
#13
qq670789542017-04-03 10:20
回复 12楼 风吹过b
想采集一张图片上函数的点, 在VB中只能用鼠标点击来记录吗?
1