Le but de ce TP est de visualiser en 2D un champ vectoriel et ensuite
de dessiner des lignes de flux à l'aide de particules. Aucune connaissance
complexe en mathématiques n'est requise !
Néanmoins vous allez tout de même devoir utiliser des outils mathématiques
tels que les vecteurs et l'intégration numérique (ce n'est pas un
gros mot !). Pour vous faciliter le travail nous vous proposerons
quelques rappels/explications au fil du TP, ainsi vous pourrez effectuer
ce dernier sans ressortir vos cours de mathématiques.
Connaissances en algorithmique et programmation requises :
L'objectif de cette première partie est de visualiser un champ vectoriel. Pour cela nous allons devoir dessiner des vecteurs sur notre feuille graphique.
Nous avons créé une nouvelle librairie C dans laquelle nous avons
défini plusieurs fonctions. Pour les utiliser vous devez impérativement
inclure le fichier champ_vectoriel.h dans votre projet de la même
manière que pour logo.h ; vous devez aussi utiliser la librarie mathématique
math.h. Pour ceci, ajoutez au début de votre programme :
Nous allons utiliser la feuille de dessin comme un système de coordonnées.
Si vous initialisez une fenêtre de taille 600x600 pixels, le pixel
au centre de la feuille sera à la position
.
Attention : l'axe des va
bien de la gauche vers la droite mais l'axe des
lui va du haut
vers le bas. Ainsi, le pixel "origine"
à la position
est situé en haut à gauche de la feuille.
Nous désirons créer une procédure permettant de dessiner un vecteur
(à partir d'une position
sur la feuille graphique)
sous forme de flêche.
Pour ce faire, nous dispons de deux nouvelles procédures logo
(et leur équivalent en C) :
(notez bien qu'il faut mettre en premier paramètre et
en deuxième).
Attention : la fonction atan2(vy,vx)
donne la valeur de l'angle en radiants !
Attention : comme l'axe des
du repère est inversé sur la feuille, il faut utiliser l'opposé de
l'angle.
Le vecteur possède une norme :
.
En C, pour calculer la racine carrée
d'un réel
il suffit
d'écrire :
rc = sqrt( r ); |
Ecrivez la procédure tracerVecteur répondant à la spécification
suivante :
tracerVecteur( X, Y, VX, VY )
paramètres :
spécification :
|
Dans le langage C, la valeur de est stoquée dans la variable
M_PI (ainsi pour obtenir la valeur de
il faut écrire 2*M_PI).
Testez votre procédure pour vérifier qu'elle fonctionne correctement.
Nous désirons maintenant dessiner un ensemble de vecteurs correspondant
à un champ vectoriel donné. Pour ceci nous mettons à votre disposition
deux fonctions obtenirVX et obtenirVY définies ci-dessous
:
obtenirVX( X, Y )
paramètres :
spécification :
|
x = 15.4; |
Ecrivez la procedure dessinerChampVectoriel répondant à la
spécification suivante :
dessinerChampVectoriel( L )
spécification :
|
Testez la puis essayez d'autres fonctions mathématiques (voir l'annexe
4.1 pour la liste des "fonctions"
que vous pouvez utiliser).
Le champ vectoriel que nous avons utilisé précédemment peut être considéré comme un champ de vitesse (par exemple la vitesse du courant à la surface d'une rivière) qui fera avancer une particule au fil du temps. Le chemin emprunté par cette particule est appelé trajectoire.
L'objectif de cette deuxième partie du TP est de visualiser d'abord une, puis plusieurs trajectoires.
Pour tracer une trajectoire vous devez considérer le curseur comme
étant la particule transportée par le flux.
Nous désirons suivre la particule au cours du temps : si
je prend une photographie de la rivière toutes les secondes, je vais
pouvoir y repérer une particule flottant sur l'eau et ainsi tracer
la trajectoire de cette dernière en reliant ses différentes positions
dans le temps par des traits.
Si à un instant le curseur se trouve en position
avec
pour vecteur vitesse
(donné par le champ de vitesse en
), il se trouvera à l'instant
d'après (dans l'exemple
précédent, on prend une photo toutes les
secondes) à la position
:
Ecrivez la procedure tracerUneTrajectoire répondant à la
spécification suivante :
tracerUneTrajectoire( X, Y, DT, N )
procédure utilisée :
spécification :
|
couleur( "rouge" ); |
Testez votre procédure pour vérifier qu'elle fonctionne correctement.
Décrivez leur influence sur la trajectoire.
Nous désirons maintenant tracer plusieurs trajectoires en faisant "démarrer" les particules aux sommets d'un quadrillage (de la même manière que pour le tracé du champ vectoriel).
Ecrivez la procedure dessinerTrajectoires répondant à la
spécification suivante :
dessinerTrajectoires( L, DT, N )
procédure utilisée :
spécification :
|
Testez votre procédure pour vérifier qu'elle fonctionne correctement.
Que pouvez vous dire du dessin obtenu si l'on prend DT=1 et N=1 ?