回 帖 发 新 帖 刷新版面

主题:为什么斜率一样但直线不直啊

程序在附件中。

我的问题是 我在excel中已经计算了斜率,斜率在直线上升段都是20,但是在vb中所画出的倾斜 的 那段直线却不直。水平那段还是直线(正确无误)。


我想了 很久 实在是想不出。请指教

还有 vb程序中
Private Sub SetAxis(PicX As PictureBox)
Dim i As Integer
PicX.Line (0, 0)-(PicX.ScaleWidth, 0), vbGreen '画X轴


For i = 0 To Pic.Width / 500
'PicX.Line (500 * i, 0)-(500 * i, Pic.Width), &HE0E0E0
PicX.CurrentX = 500 * i - 50
PicX.CurrentY = -100
PicX.Print 1 * i
Next

PicX.Line (0, PicX.Height)-(0, 0), vbGreen  '画Y轴

For i = 1 To Pic.Height / 500
''PicX.Line (0, 500 * i)-(Pic.Width, 500 * i), &HE0E0E0
PicX.CurrentX = 0
PicX.CurrentY = 500 * i
PicX.Print 10 * i
Next
End Sub
如果我想画坐标方格,将上述程序中'PicX.Line (500 * i, 0)-(500 * i, Pic.Width), &HE0E0E0
和''PicX.Line (0, 500 * i)-(Pic.Width, 500 * i), &HE0E0E0
不屏蔽
则 所画的直线 则 有的没有颜色 

请指教 

小女子万分感谢

回复列表 (共6个回复)

沙发

是有锯齿还是不直?
如果你用描点法的话估计会有问题,最好直接用画直线的函数。有锯齿则是正常的,线宽一点就看不出了。

板凳

最好用Line方法画线,如果一定要用画点的方式来画直线,请使用Pset方法,这样就可以设置颜色了。

3 楼


我不能用画点的方法,因为我是根据前后两次的坐标画直线,这样 根据多个上一次坐标和下一次坐标来画出直线,其实这每一次的上次坐标和本次坐标计算出的直线斜率都是一样的,但是画出来的直线就是不直。

请指教

4 楼


我试了一下
Pic.Line (0, 0)-(1000, 1000), vbRed
画的直线 还直,但是
   Pic.Line (0, 0)-(100, 1000), vbRed
就不直了 


上述所说的还是一次画线,还不是分段画线呢

这是怎么回事。

vb中直接画两点一线都画不直(y=x除外),是不是我哪儿的设置没有考虑到

请指教

5 楼

明白了。你所说的不知是指“实数,保留一定精确度”后造成的。

例如屏幕设置是800*600,这时候,你计算得到某点坐标应该是(12.3,27.6)这一点应该划在哪里?只能画在(12,28),实际位置和理论位置就发生错差了!

具体到你的“直线”
例如:从(20,100)到(220,101)的直线,会显示成什么样子呢?
      一般的横坐标从20到120,纵坐标就是100
          而横坐标从120到220,总表表则为101
      表现为“两根直线”

怎么解决?
vb作为一个通用语言,不解决这个问题。
在其它图形处理软件中,一般采用改变颜色的方法。
仍以(20,100)-(220,101)为例,为好理解起见,假定是在256灰度体系下表达黑色直线。
    表示的结果是,直线在横坐标为20~220之间占用两了行纵坐标(100和101)的全部像素。
    y=100这行,x=20时,灰阶为0
               x=220时,灰阶为255
               其它像素按比例计算灰阶
    y=101这行,x=20时,灰阶为255
               x=220时,灰阶为0
               其它像素按比例计算灰阶
这样看起来,就像是一条直线。

希望我说明白了。

6 楼

这不是你的错,VB确实就是这么回事,你也可以看到,用Line方法画的斜线,实际上是由若干段直线构成的,只有角度=45度时,斜线才全部由点构成。
如果有可能,可以使用Line控件。
另外,我把你那段代码试了一下,不屏蔽任何语句,用vbRed代替&HE0E0E0,画出的坐标方格都有颜色。
提醒一点,最好将图片框的ScaleMode属性设置为3。

我来回复

您尚未登录,请登录后再回复。点此登录或注册