Liste
Solution

Visual Basic - Exercice 4:

(Exercice proposé par Ruben VERA)

Pleins et dégradés :

La méthode graphique Line permet de tracer des traits pleins entre deux points, avec possibilité d'en modifier l'épaisseur. Malheureusement, il n'est pas possible de contrôler la façon dont ces points se comportent de part et d'autre du segment tracé, pas plus que de former des rectangles inclinés.

Nous nous proposons donc d'écrire une procédure (sub trace) capable de tracer un trait soit plein, soit dégradé autour de son axe. Pour les besoins de l'exercice, on se contentera d'un dégradé avec 256 niveaux de gris. L'axe du segment sera noir, alors que tous les points s'en éloignant tendront progressivement vers le blanc. Pour procéder, on examine chaque point de la surface qui recevra le dessin pour savoir s'il se trouve sur une perpendiculaire passant sur le segment à tracer. Si c'est le cas, on évaluera la distance le séparant de ce segment. Si elle est inférieure à la moitié de l'épaisseur choisie, on imprimera un point. La couleur de celui-ci sera déterminée par le type de tracé voulu. Pour un tracé "Plein", il sera noir. Sinon, sa couleur sera fonction de la distance et de l'épaisseur. Pour une distance nulle, on utilisera le noir, soit RGB(0,0,0). Pour une distance égale à la moitié de l'épaisseur, ce sera le blanc, soit RGB(255,255,255) .

 Programme demandé :

  1. Interface (voir exemple ci-dessous):
  • Quatre zones de texte pour saisir les coordonnées (x, y) des points A et B des extrémités du segment
  • Une zone de texte pour entrer l'épaisseur du trait souhaitée
  • Trois boutons ("Plein", "Dégradé" et "Efface")
  • Une zone d'image (PictureBox) pour le tracé du segment. Vous devrez mettre 3 à sa propriété ScaleMode (mode Pixel). La seule méthode de dessin autorisée pour cet objet sera .PSet . Il vous sera très utile de repérer les valeurs X et Y maximales dans ses propriétés ScaleWidth et ScaleHeight.
  1. Vous devrez écrire une fonction (nommée dist ) pour calculer la distance entre les deux points dont les coordonnées respectives lui auront été passées en arguments. Le résultat de ce calcul sera de type double.
    A titre de rappel, cette distance se calcule ainsi :
  2. Vous créerez une procédure nommée trace pour tracer le "trait" dans l'objet Picture1 en tenant compte des paramètres passés en argument (X et Y pour le point A, X et Y pour le point B, épaisseur souhaitée, mode de tracé plein ou dégradé). Comme précité, seule la méthode .PSet sera utilisée pour effectuer le tracé. Soit par exemple pour tracer un point noir : Picture1.PSet (X,Y), RGB(0,0,0)
  3. Calcul du point D (XD,YD) sur AB pour un point C (XC,YC) quelconque :

    Soit et et alors et

    Note: Si a est égal à 0, il suffit de le remplacer par une très petite valeur AVANT de procéder à la suite du calcul (b, c, XD et YD).

    Pour déterminer si D est bien situé sur le segment AB, on peut comparer les distances avec

      .

    Il suffit qu'elles soient presque identiques, soit
  4. Le bouton Plein lira tout d'abord les différentes valeurs et appellera la procédure trace avec l'argument de mode de tracé correspondant à un trait plein. Le bouton Degrade fera de même mais pour un dégradé.
  5. Enfin, le bouton Efface se contentera d'effacer le tracé.

 

    ( SOLUTION DE L'EXERCICE 4 )