Windows フォームでデカルト座標系を作成し、(x,y) 座標をプロットできるようにしたいと考えています。
どうすればいいですか?私はすでに調査を行っていますが、残念ながら、デカルト平面ではなく「チャート」にのみ着陸します。
私の問題に関するリンクは役に立ちます...ありがとう...
Windows フォームでデカルト座標系を作成し、(x,y) 座標をプロットできるようにしたいと考えています。
どうすればいいですか?私はすでに調査を行っていますが、残念ながら、デカルト平面ではなく「チャート」にのみ着陸します。
私の問題に関するリンクは役に立ちます...ありがとう...
WinForms では、PictureBoxコントロールを使用してから、DrawLine、DrawEllipse などのプリミティブを使用して描画できます。次の SO の質問には例が含まれています。
WPF では、 Canvasコントロールを同様に使用できます。
自動軸とラベル付けが必要な場合は、チャートが最適です。あなたのユースケースでは、ポイント チャートが適切なソリューションのようです。
カスタム UserControl を作成し、Paint を使用してコントロールの表面に描画する必要があります。Paint イベントは、グラフの描画に使用できる Graphics オブジェクトを提供します。ただし、知っておくべき重要なことは、Y 軸を交換する必要があるということです。Windows では、画面の左下ではなく左上が 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はこれを比較的簡単にし、非常に柔軟です。
動的データ表示も一見の価値がありますが、WindowsフォームではなくWPFです。