1

我想以 Windows 形式制作笛卡尔坐标系,并能够在其中绘制 (x,y) 坐标。

我该怎么做呢?我已经做了我的研究,但不幸的是我只登陆“图表”而不是笛卡尔平面。

有关我的问题的任何链接都会有所帮助...谢谢...

4

3 回答 3

3

您应该创建一个自定义 UserControl 并使用 Paint 甚至在控件的表面上进行绘制。Paint 事件为您提供了一个 Graphics 对象,您可以使用它来绘制图形。然而,最重要的是,您需要交换 Y 轴。在 Windows 中,屏幕的左上角是 0,0 而不是左下角。

因此,例如,以下代码将在 contorl 上绘制图形的 x 和 y 轴:

Public Class CartesianGraph
    Public Property BottomLeftExtent() As Point
        Get
            Return _bottomLeftExtent
        End Get
        Set(ByVal value As Point)
            _bottomLeftExtent = value
        End Set
    End Property
    Private _bottomLeftExtent As Point = New Point(-100, -100)


    Public Property TopRightExtent() As Point
        Get
            Return _topRightExtent
        End Get
        Set(ByVal value As Point)
            _topRightExtent = value
        End Set
    End Property
    Private _topRightExtent As Point = New Point(100, 100)


    Private Sub CartesianGraph_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim extentHeight As Integer = _topRightExtent.Y - _bottomLeftExtent.Y
        Dim extentWidth As Integer = _topRightExtent.X - _bottomLeftExtent.X
        If (extentHeight <> 0) And (extentWidth <> 0) Then
            If (_bottomLeftExtent.Y <= 0) And (_topRightExtent.Y >= 0) Then
                Dim xAxis As Integer = e.ClipRectangle.Height - (_bottomLeftExtent.Y * -1 * e.ClipRectangle.Height \ extentHeight)
                e.Graphics.DrawLine(New Pen(ForeColor), 0, xAxis, e.ClipRectangle.Width, xAxis)
            End If
            If (_bottomLeftExtent.X <= 0) And (_topRightExtent.X >= 0) Then
                Dim yAxis As Integer = e.ClipRectangle.Width * _bottomLeftExtent.X * -1 \ extentWidth
                e.Graphics.DrawLine(New Pen(ForeColor), yAxis, 0, yAxis, e.ClipRectangle.Height)
            End If
        End If
    End Sub
End Class
于 2012-05-07T15:27:01.417 回答
3

在 WinForms 中,您可以使用PictureBox控件,然后使用 DrawLine、DrawEllipse 等图元在其上进行绘制。以下 SO 问题包含一个示例:

在 WPF 中,您可以类似地使用Canvas控件:

如果你想要自动轴和标签,图表确实是要走的路。对于您的用例,点图似乎是正确的解决方案:

于 2012-05-07T15:28:17.027 回答
0

.NET 有一个图表库,但是有一些开源项目可以很好地完成这类事情。如果你想绘制坐标,Zedgraph 使这相对容易并且非常灵活。

ZedGraph 示例

动态数据显示也值得一看,不过是WPF,不是Windows Forms

于 2012-05-07T16:46:47.537 回答