когдато дааааавно создавал класс для рисования 3х графиков.... может поможет
Код | Public Class CCharts #Region "Variables"
Public Shared IsGraphed As Boolean
Private Shared PB As PictureBox Public Shared F1Color As New Color() Public Shared F2Color As New Color() Public Shared F3Color As New Color()
Public Shared XFrom As Integer Public Shared XTo As Integer Public Shared YFrom As Integer Public Shared YTo As Integer
Public Shared GExp As Double
Public Shared DC As Graphics #End Region
#Region "Properties"
Public Shared ReadOnly Property MaxX() As Integer Get MaxX = PB.Width End Get End Property
Public Shared ReadOnly Property MaxY() As Integer Get MaxY = PB.Height End Get End Property #End Region
#Region "Functions" Public Shared Function Plot()
Dim exp As Double
IsGraphed = True exp = GExp
DC.Clear(Color.White) Dim MaxX As Integer MaxX = PB.Width
Dim XDel As Double = MaxX / (XTo - XFrom)
Dim MaxY As Integer MaxY = PB.Height
Dim YDel As Double = MaxY / (YTo - YFrom)
Dim Pn As New Pen(Color.Black)
DC.DrawLine(Pn, 20, 0, 20, MaxY) DC.DrawLine(Pn, 0, MaxY - 20, MaxX, MaxY - 20)
Dim fn As New System.Drawing.Font(Drawing.FontFamily.GenericSansSerif, 9, FontStyle.Regular)
DC.DrawString("X", fn, Drawing.Brushes.Black, MaxX - 25, MaxY - 35)
DC.DrawString(XTo.ToString(), fn, Drawing.Brushes.Black, MaxX - 25, MaxY - 14)
DC.DrawString(XFrom.ToString(), fn, Drawing.Brushes.Black, 25, MaxY - 14)
DC.DrawString("Y", fn, Drawing.Brushes.Black, 25, 25)
DC.DrawString(YFrom.ToString(), fn, Drawing.Brushes.Black, 2, MaxY - 35)
DC.DrawString(YTo.ToString(), fn, Drawing.Brushes.Black, 1, 25)
Dim x As Double
Dim pen_1 As New Pen(F1Color) Dim pen_2 As New Pen(F2Color) Dim pen_3 As New Pen(F3Color)
For x = XFrom To XTo Step exp If (x > 0) Then DC.DrawLine(pen_1, CSng((x - XFrom) * XDel), MaxY - CSng((CFunc.F1(x) - YFrom) * YDel), CSng((x - XFrom + exp) * XDel), MaxY - CSng((CFunc.F1(x + exp) - YFrom) * YDel)) End If DC.DrawLine(pen_2, CSng((x - XFrom) * XDel), MaxY - CSng((CFunc.F2(x) - YFrom) * YDel), CSng((x - XFrom + exp) * XDel), MaxY - CSng((CFunc.F2(x + exp) - YFrom) * YDel)) If (x > 2.1) Or (x < 1.9) Then DC.DrawLine(pen_3, CSng((x - XFrom) * XDel), MaxY - CSng((CFunc.F3(x) - YFrom) * YDel), CSng((x - XFrom + exp) * XDel), MaxY - CSng((CFunc.F3(x + exp) - YFrom) * YDel)) End If Next x
End Function Public Shared Function Initialise(ByRef CDC As Control) PB = CDC IsGraphed = False DC = PB.CreateGraphics() End Function
#End Region
End Class
| |