2012-05-07 18 views
0

デカルト座標系をWindows形式で作成し、(x、y)座標をプロットできるようにしたいと思います。VB.NETデカルト座標系

どうすればよいですか?私はすでに研究をしましたが、残念ながら私はデカルト平面ではなく "チャート"に着くだけです。

私の問題に関するすべてのリンクは、カスタムユーザーコントロールを作成して、コントロールの表面上に描画するためにも、ペイントを使用する必要があります...ありがとう...

+0

フォームではありません。単に「x-yプロット」という用語を使用してください。デカルトは内在性であり、あまり言及されていない。あなたはそれをグーグルすれば多くの例があります。 –

+0

@jaimeはあなたの編集がこれを単純なx-y散布図に関する質問に変えてくれたように思えました。私はOPがカスタム2D図面を作成できるようにしたいと考えています – MarkJ

+0

@userカスタム2D図面を作成する必要がありますか、標準的なx-y散布図を作成する必要はありますか? – MarkJ

答えて

2

をするのに役立ちます。ペイントイベントは、グラフを描画するために使用できるGraphicsオブジェクトを提供します。しかし、知っておくべき大きなことは、Y軸を入れ替える必要があることです。ウィンドウでは、画面の左上は左下ではなく0,0です。あなたはのPictureBoxコントロールを使用して、使用してその上に描画することができ、WinFormsので

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イベントとGraphicsオブジェクトについて勉強し、これをリファレンスとして使用します...もう一度感謝します。 –

+0

線を描くのは簡単です。それは、ラインがどこに行くの計算すべての思考と努力を要します。私の例で見てきたように、グラフの外側の範囲を設定するためのプロパティを提供していたので、私のコードはグラフのスケールを計算しなければなりませんでした。グラフ上の1点につき画面上に単純な1ピクセルしかない場合は、コードがはるかに簡単になります。 –

+0

カスタムユーザーコントロールが過剰と思われます。 Heinziが答えたようにPictureBoxに描画するだけではどうですか? – MarkJ

2

ので、例えば、次のコードは、contorl上のグラフのxとy軸を描画します等DrawLine、DrawEllipseなどのプリミティブは、次のSO質問例を含んでいる:

あなたは自動軸とラベル付けをしたい場合は チャートが実際に移動するための方法です、

はWPFでは、あなたは同様にキャンバスコントロールを使用することができます。あなたのユースケースについて、ポイントチャートは、適切なソリューションのように思える:

0

.NETは、グラフ作成ライブラリを持っているが、この種のものを行う、いくつかのオープンソースプロジェクトがありますかなり良い。座標をプロットしたい場合、Zedgraphはこれを比較的簡単にし、非常に柔軟です。

ZedGraph Example

Dynamic Data Displayも見て価値があるが、それはWPFで、Windowsは、単語 "デカルトが" あなたの検索であなたを助けにはなりません

関連する問題