Exercice Visual Basic : Courbe

Participez au vote ☆☆☆☆☆★★★★★
Ecrire le code VB qui prmet de réaliser l'interface suivante:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
Option 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 Sub End Class |