主题:VB绘制双对数坐标图
chhw777
[专家分:10] 发布于 2009-03-07 19:59:00
请各位大侠帮忙指点一下怎样用vb6.0绘制双对数坐标图。谢谢啊 [em19]
回复列表 (共6个回复)
沙发
chhw777 [专家分:10] 发布于 2009-03-08 10:48:00
我自己编了一个,但是觉得有问题。代码是这样的:
Private Sub Form_Resize()
Cls
Me.AutoRedraw = True
Dim mi As Integer
mi = 0
On Error Resume Next
Form1.Scale (-0.5, 2.5)-(3.5, -0.5) '四个数不一样,可以对照着结果看scale的用法,如果把四个数用form1的width和height替换下来,新坐标就不扭曲了。
Form1.Line (0, 0)-(3, 0) '画横坐标
For i = 0 To 3
Form1.Line (i, 0)-(i, 0.1) '标横坐标刻度
Print 10 ^ mi
mi = mi + 1
If mi > 3 Then
Exit For
End If
Next
Form1.Line (0, 0)-(0, 2) '画纵坐标
Dim mi2 As Integer
mi2 = 0
For i = 0 To 2
Form1.Line (0, i)-(0.1, i) '标纵坐标刻度
Print 10 ^ mi2
mi2 = mi2 + 1
Next
End Sub
'请各位大侠给指点以下。
板凳
老大徒伤悲 [专家分:29120] 发布于 2009-03-08 15:37:00
说实话,从结果上看,似乎没有错误(究竟有没有?你运行一下就见分晓)。但是以下几点我的意见应如下处理:
第一个问题:
for……next循环是不需要你用代码来改变循环变量的,也不需要你自己检测变量是否到达终值。basic语言自动处理这些。
第二个问题:
for……next 循环中,无需使用与循环变量密切相关的其它变量,而只需要对循环变量稍作计算,就可以了。
第三个问题:
10^mi就是你的坐标轴刻度,完全不应该让计算机作这么巨大的运算,而改用1后面补充mi个0的方法会提高效率。
综上,代码可以修改如下(当然,你的代码仅仅是绘制坐标轴,其它的代码暂且不说):
Private Sub Form_Resize()
Cls
Me.AutoRedraw = True
Dim mi As Integer
Me.Scale (-0.5, 2.5)-(3.5, -0.5) '四个角坐标本来可以自动根据数据设定,这里暂且沿用你的设定值
Line (0, 0)-(3, 0) '画横坐标
Line (0, 0)-(0, 2) '画纵坐标
For mi = 0 To 3
Line (i, 0)-(i, 0.1) '标横坐标刻度
Print 1;string("0",mi)
if mi<3 then
Line (0, i)-(0.1, i) '标纵坐标刻度
Print 1;string("0",mi)
endif
Next
End Sub
3 楼
chhw777 [专家分:10] 发布于 2009-03-09 19:18:00
谢谢啊,小弟不胜感激。
4 楼
chhw777 [专家分:10] 发布于 2009-03-09 19:20:00
完全不一样的思路,开眼界了。谢谢谢谢。
5 楼
chhw777 [专家分:10] 发布于 2009-03-09 19:57:00
我运行了一下,有些问题。不过思路比我的好多了:我修改了一下:
Private Sub Form_Resize()
Cls
Me.AutoRedraw = True
Dim mi As Integer
Me.Scale (-0.5, 2.5)-(3.5, -0.5) '四个角坐标本来可以自动根据数据设定,这里暂且沿用你的设定值
Line (0, 0)-(3, 0) '画横坐标
Line (0, 0)-(0, 2) '画纵坐标
For mi = 0 To 3
Line (mi, 0)-(mi, 0.1) '标横坐标刻度
Print 1 & String(mi, "0")
If mi < 3 Then
Line (0, mi)-(0.1, mi) '标纵坐标刻度
Print 1 & String(mi, "0")
End If
Next
End Sub
6 楼
老大徒伤悲 [专家分:29120] 发布于 2009-03-11 17:10:00
恩。string函数的参数顺序我记错了。
我来回复