2012-05-07 5 views
0

직교 좌표계를 Windows 형식으로 만들고 (x, y) 좌표를 그릴 수 있어야합니다.VB.NET 직교 좌표계

어떻게해야합니까? 나는 이미 나의 연구를했지만, 불행하게도 나는 직각 평면이 아니라 "챠트"에만 착륙했다. 당신은 정의의 UserControl을 생성하고 컨트롤의 표면에 그릴 심지어 페인트를 사용한다

+0

단어를 형성한다 "데카르트의"검색에 도움이되지 않습니다. 그냥 "x-y 플롯"이라는 용어를 사용하십시오. 데카르트는 내재적이며 드물게 언급됩니다. 당신이 google 그것을하는 경우에 많은 예제가 있습니다. –

+0

@jaime이 당신의 편집으로 이것을 간단한 x-y 산점도에 관한 질문으로 바꾸 었습니다. 나는 OP가 사용자 정의 2D 도면을 생성 할 수 있기를 원합니다. – MarkJ

+0

@user 사용자 정의 2D 도면 또는 표준 x-y 산점도를 작성해야합니까? – MarkJ

답변

2

... 감사합니다 도움이 될 것입니다 내 문제에 대한

모든 링크 .... Paint 이벤트는 그래프를 그리는 데 사용할 수있는 Graphics 객체를 제공합니다. 그러나 알아야 할 중요한 점은 Y 축을 교체해야한다는 것입니다. 창에서 화면의 왼쪽 상단은 왼쪽 하단보다 0,0입니다. 만약 의 PictureBox 제어를 사용하고 사용 그것에 그릴 수 윈폼에서

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 
+0

이 샘플을 제공해 주셔서 감사합니다.하지만이 Paint 이벤트를 처음 접했습니다. 서로 교차하는 간단한 선이이 많은 코드를 사용한다는 것을 알지 못했습니다. 이 Paint 이벤트와 Graphics 객체에 대해 공부하고 이것을 참고로 사용하겠습니다 ... 다시 한번 감사드립니다. –

+0

선 그리기는 쉽습니다. 그것은 모든 생각과 노력을 필요로하는 선이가는 곳을 계산합니다. 예제에서 볼 수 있듯이 그래프의 외부 범위를 설정하는 속성을 제공하므로 코드의 크기를 계산해야합니다. 그래프의 한 점당 화면에 단순한 픽셀 하나가있는 경우 코드가 훨씬 간단 해집니다. –

+0

사용자 지정 사용자 지정 컨트롤이 과도하게 보입니다. Heinzi가 대답 한 것처럼 PictureBox를 그리는 것이 어떻습니까? – MarkJ

2

:

그래서, 예를 들어 다음의 코드는 CONTORL에서 그래프의 x 및 y 축선을 그리는 것

: 등 DrawLine, DrawEllipse, 같은 프리미티브 다음은 SO 질문은 예를 들어 있습니다 당신은 자동 축 및 라벨을 원하는 경우에 차트 실제로 이동하는 방법,

:

은 WPF에서는 유사 캔버스 컨트롤을 사용할 수 있습니다. 사용 사례를 들어, 포인트 차트는 최적의 솔루션처럼 보인다 :