デカルト座標系をWindows形式で作成し、(x、y)座標をプロットできるようにしたいと思います。VB.NETデカルト座標系
どうすればよいですか?私はすでに研究をしましたが、残念ながら私はデカルト平面ではなく "チャート"に着くだけです。
私の問題に関するすべてのリンクは、カスタムユーザーコントロールを作成して、コントロールの表面上に描画するためにも、ペイントを使用する必要があります...ありがとう...
デカルト座標系をWindows形式で作成し、(x、y)座標をプロットできるようにしたいと思います。VB.NETデカルト座標系
どうすればよいですか?私はすでに研究をしましたが、残念ながら私はデカルト平面ではなく "チャート"に着くだけです。
私の問題に関するすべてのリンクは、カスタムユーザーコントロールを作成して、コントロールの表面上に描画するためにも、ペイントを使用する必要があります...ありがとう...
をするのに役立ちます。ペイントイベントは、グラフを描画するために使用できる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
このサンプルを私に提供していただきありがとうございますが、このペイントイベントは本当に新しいです。互いに交差する単純な線がこの多くのコードをとることは分かっていませんでした。私はこのPaintイベントとGraphicsオブジェクトについて勉強し、これをリファレンスとして使用します...もう一度感謝します。 –
線を描くのは簡単です。それは、ラインがどこに行くの計算すべての思考と努力を要します。私の例で見てきたように、グラフの外側の範囲を設定するためのプロパティを提供していたので、私のコードはグラフのスケールを計算しなければなりませんでした。グラフ上の1点につき画面上に単純な1ピクセルしかない場合は、コードがはるかに簡単になります。 –
カスタムユーザーコントロールが過剰と思われます。 Heinziが答えたようにPictureBoxに描画するだけではどうですか? – MarkJ
:
ので、例えば、次のコードは、contorl上のグラフのxとy軸を描画します等DrawLine、DrawEllipseなどのプリミティブは、次のSO質問例を含んでいる:
あなたは自動軸とラベル付けをしたい場合は チャートが実際に移動するための方法です、:
はWPFでは、あなたは同様にキャンバスコントロールを使用することができます。あなたのユースケースについて、ポイントチャートは、適切なソリューションのように思える:
.NETは、グラフ作成ライブラリを持っているが、この種のものを行う、いくつかのオープンソースプロジェクトがありますかなり良い。座標をプロットしたい場合、Zedgraphはこれを比較的簡単にし、非常に柔軟です。
Dynamic Data Displayも見て価値があるが、それはWPFで、Windowsは、単語 "デカルトが" あなたの検索であなたを助けにはなりません
フォームではありません。単に「x-yプロット」という用語を使用してください。デカルトは内在性であり、あまり言及されていない。あなたはそれをグーグルすれば多くの例があります。 –
@jaimeはあなたの編集がこれを単純なx-y散布図に関する質問に変えてくれたように思えました。私はOPがカスタム2D図面を作成できるようにしたいと考えています – MarkJ
@userカスタム2D図面を作成する必要がありますか、標準的なx-y散布図を作成する必要はありますか? – MarkJ