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é :
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.
- 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 : |
|
- 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)
Calcul du point D (XD,YD) sur AB pour un
point C (XC,YC) quelconque :
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 |
|
- 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é.
- Enfin, le bouton Efface se contentera d'effacer le tracé.
( SOLUTION DE L'EXERCICE 4 )
|