none
VB.NET 怎么建立绝对坐标系? RRS feed

  • 问题

  •  VB.NET中窗体的坐标原点在左上角,X轴向右,Y轴向下,但是我想在窗题中自定义建立坐标系,在这个坐标系中画线和点,线和点的坐标完全由“自定义建立坐标系”决定,不用考虑窗体的坐标系。怎么做呢?行的话请给出具体的做法,不甚感激。
    visual studio 2008
    2009年2月20日 10:40

答案

全部回复

  •  我要建立的坐标X轴向右,Y轴向上,用我建立的坐标画图,就是不用参考窗体坐标,怎么办?
    visual studio 2008
    2009年2月21日 11:59
  • Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

            ''//平移变换,将Y坐标下移Form的高度   
            e.Graphics.TranslateTransform(0, Me.Height)
            ''//缩放变换,Y坐标缩放比例为-1以完成Y的反向   
            e.Graphics.ScaleTransform(1, -1)

                    e.Graphics.DrawLine(Pens.Black, 0, 0, 100, 100)
                End Sub


    http://feiyun0112.cnblogs.com/
    2009年2月23日 1:39
    版主
  • 感谢MVP版主的代码,已运行过,问题有一下几点:

    画出的直线不是从原点出发;
    第一次最大化时,会显示两个直线;
    ''//平移变换,将Y坐标下移Form的高度 ——是将X坐标向下移吧?

    谢谢了,能解决下吗?



    visual studio 2008
    2009年2月23日 13:52
  • ''//平移变换,将Y坐标下移Form的高度;''//缩放变换,Y坐标缩放比例为-1以完成Y的反向

    这两句话的意思我明白了,向把Y轴向下平移窗体高度,再反向,,点(X,0)在窗体最左边,但是X轴还是在窗体的最上边?

    还有问题是:

    画出的直线不是从原点出发;
    第一次最大化时,会显示两个直线;
    visual studio 2008
    2009年2月23日 14:09
  •  

    ''//平移变换,将Y坐标下移Form的高度  
            e.Graphics.TranslateTransform(0, Me.ClientRectangle.Height)
          


    Private Sub Form1_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SizeChanged
            Me.Invalidate()
        End Sub


    http://feiyun0112.cnblogs.com/
    2009年2月24日 0:53
    版主
  • 已经运行成功了,感谢版主!
    窗体原点坐标在左下角,我想问一下可不可以把原点坐标移到(30,30)这一点呢?需要用到什么语句,谢谢了。


    visual studio 2008
    2009年2月24日 7:53
  • 2009年2月24日 8:02
    版主
  •  

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            ''//平移变换,将Y坐标下移Form的高度  
            e.Graphics.TranslateTransform(0, Me.ClientRectangle.Height)
            ''//缩放变换,Y坐标缩放比例为-1以完成Y的反向  
            e.Graphics.ScaleTransform(1, -1)
            e.Graphics.DrawLine(Pens.Black, 0, 0, 100, 100)
            e.Graphics.DrawLine(Pens.Black, 0, 0, 100, 200)
            e.Graphics.DrawLine(Pens.Black, 0, 0, 100, 300)
        End Sub

        Public Sub TranslateTransform(ByVal dx As Single, ByVal dy As Single)
            Dim instance As Graphics
            Dim dx As Single = 30
            Dim dy As Single = 30

            instance.TranslateTransform(dx, dy)
        End Sub


        Private Sub Form1_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.SizeChanged
            Me.Invalidate()
        End Sub
    End Class



    以上代码没有运行成功。
    visual studio 2008
    2009年2月24日 8:43

  •   e.Graphics.TranslateTransform(0, Me.ClientRectangle.Height)

    换成
      e.Graphics.TranslateTransform(dx, dy)
    http://feiyun0112.cnblogs.com/
    2009年2月24日 8:47
    版主
  • dx和dy处打了波浪线,显示错误。

    在paint中也要调用这个事件吧,我在paint中e.Graphics.DrawLine(Pens.Black, 0, 0, 100, 300)后面加入TranslateTransform(ByVal dx As Single, ByVal dy As Single),也出现错误了,请问,应该怎么调用呢?
    visual studio 2008
    2009年2月24日 8:47
  • 我是先把坐标原点放在左下角,再变到(30,30)啊,不是从左上角到(30,30)。


    visual studio 2008
    2009年2月24日 8:54
  • ''//平移变换,将Y坐标下移Form的高度  
            e.Graphics.TranslateTransform(0, Me.ClientRectangle.Height)
            ''//缩放变换,Y坐标缩放比例为-1以完成Y的反向  
            e.Graphics.ScaleTransform(1, -1)

            e.Graphics.TranslateTransform(30, 30)

    2009年2月24日 8:58
    版主
  • 谢谢了,运行成功。请问一般这些知识是从什么地方可以知道呢?
    visual studio 2008
    2009年2月24日 12:46
  • VB.NET中窗体的坐标原点在左上角,X轴向右,Y轴向下,但是我想在窗题中自定义建立坐标系,在这个坐标系中画线和点,线和点的坐标完全由“自定义建立坐标系”决定,不用考虑窗体的坐标系。这个在vb中直接用picturebox.scale就可以了,但在在VB.NET中该怎么做呢?行的话请给出具体的做法,不甚感激。
    2010年12月10日 7:33
  • 错误 1 “TranslateTransform”不是“System.Drawing.Graphics”的成员。 请问您是怎么回事?
    2010年12月10日 8:17