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 делает это относительно легко и довольно гибко.
Динамическое отображение данных тоже стоит посмотреть, но это WPF, а не Windows Forms