VB.NET декартова система координат

Я хотел бы сделать декартову систему координат в форме Windows и иметь возможность строить координаты (x,y) в ней.

Как мне это сделать? Я уже провел свое исследование, но, к сожалению, я приземляюсь только на "картах", а не на декартовой плоскости.

Любые ссылки, касающиеся моей проблемы, помогут... спасибо...

3 ответа

В WinForms вы можете использовать элемент управления PictureBox, а затем рисовать на нем с помощью примитивов, таких как DrawLine, DrawEllipse и т. Д. Следующий вопрос SO содержит пример:

В WPF вы можете использовать элемент управления Canvas аналогично:

Если вам нужны автоматические оси и маркировка, диаграммы - это действительно правильный путь. Для вашего случая использования точечная диаграмма выглядит как правильное решение:

Вы должны создать пользовательский элемент управления UserControl и использовать Paint даже для рисования на поверхности элемента управления. Событие Paint предоставляет вам объект Graphics, который вы можете использовать для рисования графика. Однако важно знать, что вам нужно поменять ось Y. В окнах верхний левый угол экрана равен 0,0, а не нижний левый.

Так, например, следующий код нарисует оси 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

В.NET есть библиотека графиков, но есть несколько проектов с открытым исходным кодом, которые хорошо справляются с подобными задачами. Если вы хотите построить координаты, Zedgraph делает это относительно легко и довольно гибко.

Пример ZedGraph

Динамическое отображение данных тоже стоит посмотреть, но это WPF, а не Windows Forms

Другие вопросы по тегам