Exercice Visual Basic : Courbe

Ecrire le code VB qui prmet de réaliser l'interface suivante:



123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137Option Explicit On Option Strict On Public Class frmExo4 Private Const marge As Int32 = 10 'marges sur les cotés du graphics Private Const pas As Int32 = 1 'pas de tracé de la courbe Private Const PI As Double = 3.141593 Private Const nPeriode As Int32 = 5 'nombre de sinusoides à tracer.   Private Function TraceAxes(ByVal g As System.Drawing.Graphics, ByVal p As System.Drawing.Pen) As Boolean 'Tracer les axes x,y 'Ce tracé est paramétré selon la taille de la feuille Dim milieu As Int32 'position de l'axe x  Try milieu = (Me.Height - marge) \ 2 'division entière antislash  'axe des X g.DrawLine(p, marge, milieu, Me.Width - marge, milieu) 'Axe des y g.DrawLine(p, marge, Me.Height - marge, marge, marge) Return True  Catch ex As Exception MessageBox.Show("impossible de tracer les axes" & vbCrLf & ex.Message) Return False End Try  End Function Private Function TraceCourbe(ByVal g As System.Drawing.Graphics, ByVal p As System.Drawing.Pen) As Boolean 'Tracer la courbe 'Ce tracé est paramétré selon la taille de la feuille  Dim milieu As Int32 'position de l'axe x Dim amplitude As Double ' l'aplitude de la sinusoide en pixel Dim omega As Double ' la pulsation de la sinusoide Dim Periode As Int32 ' la période de la courbe en pixel Dim i As Int32 ' le point courant de la sinusoide Dim y As Double ' la valeur du point courant en radian par pixel Dim P1 As Point ' point précedent Dim P2 As Point ' point courant Dim CodeRetour As Boolean 'le code retour de la fonction  Try 'calculer l'amplitude pour remplir la feuille  milieu = (Me.Height - marge) \ 2 'division entière antislash  amplitude = Me.Height \ 2 - marge  'calculer la pulsation pour obtenir 10 périodes  Periode = (Me.Width - 2 * marge) \ nPeriode omega = 2 * PI / Periode  'créer les points qui définissent le segment élémentaire  P1 = New Point(marge, milieu) P2 = New Point  For i = marge + 1 To Me.Width - marge Step pas y = amplitude * System.Math.Sin(omega * i) 'calculer  y = y + milieu 'replacer par rapport à l'axe 'remplir P2 P2.X = i P2.Y = CInt(y) 'tracé proprement dit g.DrawLine(p, P1, P2) 'passer au point suivant P1.X = P2.X P1.Y = P2.Y Next CodeRetour = True  Catch ex As Exception MessageBox.Show("impossible de tracer la courbe" & vbCrLf & ex.Message) CodeRetour = False  Finally P1 = Nothing P2 = Nothing End Try  Return CodeRetour  End Function Private Sub peindre()  'créer les objets graphiques utiles Dim GraphicSinus As System.Drawing.Graphics 'un objet graphic pour dessinner Dim MyPen As System.Drawing.Pen 'un objet stylo  GraphicSinus = Me.CreateGraphics MyPen = New System.Drawing.Pen(System.Drawing.Color.Black)  GraphicSinus.Clear(System.Drawing.Color.Aquamarine)  'Dessiner ce qui est demandé If Me.ChkAxes.Checked Then TraceAxes(GraphicSinus, MyPen) End If If Me.ChkCourbe.Checked Then TraceCourbe(GraphicSinus, MyPen) End If  'détruire les objets après usage GraphicSinus = Nothing MyPen = Nothing End Sub Private Sub btnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQuit.Click End End Sub  Private Sub frmExo4_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint 'sur l'événement paint redessiner tout peindre() End Sub  Private Sub ChkAxes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChkAxes.CheckedChanged peindre() End Sub  Private Sub ChkCourbe_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChkCourbe.CheckedChanged peindre() End Sub   Private Sub frmExo4_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.SizeChanged peindre() End Sub  Private Sub frmExo4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  End SubEnd Class
Article publié le 07 Janvier 2012