我想在Windows窗体中创建一个笛卡儿坐标系,并能够绘制坐标(x,y)。VB.NET笛卡尔坐标系
我怎么做到这一点?我已经完成了我的研究,但不幸的是,我只落在“图表”而不是笛卡尔飞机上。
关于我的问题,将有助于...感谢任何链接...
我想在Windows窗体中创建一个笛卡儿坐标系,并能够绘制坐标(x,y)。VB.NET笛卡尔坐标系
我怎么做到这一点?我已经完成了我的研究,但不幸的是,我只落在“图表”而不是笛卡尔飞机上。
关于我的问题,将有助于...感谢任何链接...
你应该创建一个自定义用户控件,并使用画图甚至绘制控件的表面上。 Paint事件为您提供了一个可用于绘制图形的Graphics对象。然而,要知道的重要一点是,您需要交换Y轴。在窗口中,屏幕的左上角是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
谢谢你给我提供这个样本,但我对这个Paint事件真的很陌生。不知道一条简单的线路穿过彼此会采取这么多的代码。我将研究这个Paint事件和Graphics对象,并将其用作参考......再次感谢。 –
画线很简单。这是计算线路所需的所有思想和努力。正如你在我的例子中看到的那样,我提供了属性来设置图的外部范围,所以我的代码必须计算图的比例。如果你在屏幕上每一个点上只有一个简单的像素,代码就会简单得多。 –
自定义用户控件看起来过多。为什么不像Heinzi在他的回答中所说的那样画一个PictureBox? – MarkJ
Winforms中,可以使用一个的PictureBox控制,然后使用在其上绘制基元如的DrawLine,DrawEllipse等。以下SO问题包含一个例子:
在WPF中,你可以使用一个帆布控制类似:
如果你想自动轴和标签,图表确实是要走的路。为了您的使用情况中,点图似乎是正确的解决方案:
.NET有一个图表库,但也有做这样的事情了几个开源项目很好。如果你想绘制坐标Zedgraph使这相对容易,而且非常灵活。
Dynamic Data Display也是值得看的,但它是WPF,而不是Windows窗体
单词 “笛卡尔” 不会帮助你在你的搜索。只是使用术语“x-y图”。笛卡儿是隐含的,很少被提及。如果你谷歌它有很多的例子。 – 2012-05-07 15:28:53
@jaime在我看来,你的编辑把它变成了一个关于简单的x-y散点图的问题。我认为OP希望能够创建自定义2D图纸 – MarkJ
@您需要创建自定义2D图纸还是标准x-y散点图? – MarkJ