Algo & Prog 1 Python : TP séance 05
- Rendu du TP sur Ametice :
- Suivez les instructions pour le rendu du TP en mettant le bon numéro de séance dans le nom du répertoire.
- N'oubliez pas de rendre votre travail à la fin de la séance comme indiqué, même si vous n'avez pas fini la planche de TP, puis de rendre la version finale avant le début de la séance suivante.
Exercice 1. Tracé de courbe de Polynôme avec Tkinter
On se propose de tracer des courbes à partir de la classe Polynome
du
TP précédent.
1.a. Programme principal
Recopier l'exemple de dessin en TkInter de la planche de TP01,
puis recopier au début, juste après les imports, la classe Polynome
du TP04
avec toutes ses méthodes.
1.b. Repère
Écrire une classe Repere
dont le constructeur reçoit en paramètre
une zone_dessin
(le Canvas
de TkInter créé dans le programme principal)
et la stocke en attribut.
Le constructeur stocke également dans des attributs la largeur
et la hauteur
de la zone de dessin en pixels, qui peuvent être retrouvés
par int(zone_dessin.cget("width"))
et int(zone_dessin.cget("height"))
.
Dans le programme principal, la classe Repere
sera évidemment instanciée
après la création de la zone de dessin.
1.c Bornes du plan réel
Rajouter dans la classe Repere
une méthode
set_bornes (xmin, xmax, ymin, ymax)
1 qui reçoit en paramètres les
bornes délimitant le plan réel qui sera affiché dans la zone de dessin. La
méthode stocke ces bornes en attribut.
Appeler cette méthode à la fin du constructeur de manière à initialiser
xmin
et ymin
à -5
, xmax
et ymax
à 5
.
1.d. Changement de coordonnées
Nous allons faire correspondre le système de coordonnées en pixels de la zone
de dessin (axe des y vers la bas), aux coordonnées dans le plan (axe des y vers
le haut) délimité par les bornes xmin
, xmax
, ymin
, ymax
stockées
dans l'instance :
-
le coin en haut à gauche a les coordonnées (
0
,0
) dans la zone de dessin, et correspond au point (xmin
,ymax
) dans le plan ; -
le coin en bas à droite a les coordonnées (
largeur
-1,hauteur
-1), et correspond au point (xmax
,ymin
) dans le plan.
Rajouter dans la classe Repere
la méthode
changer_coords_plan_vers_dessin (xp, yp)
,
qui reçoit en paramètres des coordonnées xp
, yp
dans le plan réel,
et renvoie un tuple de coordonnées entières (xd, yd)
en pixels dans la
zone de dessin.
Rajouter dans la classe Repere
la méthode
changer_coords_dessin_vers_plan (xd, yd)
,
qui reçoit en paramètres des coordonnées xd
, yd
en pixels dans la
zone de dessin, et renvoie un tuple de coordonnées entières (xp, yp)
dans le plan réel.
Dans le programme principal, tester les méthodes sur les 4 coins ainsi que sur le centre de la zone de dessin.
1.e. Tracé des axes
Rajouter dans la classe Repere
la méthode dessiner_axes
qui dessine les axes du repère réel dans la zone de dessin,
en gris.
Il suffit de convertir les coordonnées (0
,0
) du plan en coordonnées
entières (xd0
,yd0
) en pixels dans la zone de dessin, puis de tracer
la ligne horizontale de 0
à largeur-1
passant par ce point, et
la ligne verticale de 0
à hauteur-1
passant par ce point.
1.f. Tracé des graduations
Rajouter dans la classe Repere
la méthode dessiner_graduations
qui dessine (sauf à l'origine) les graduations des unités sur les axes
du repère réel dans la zone de dessin, ainsi que
- sous chaque graduation de l'axe horizontal, la valeur de la coordonnée x,
- à gauche de chaque graduation de l'axe vertical, la valeur de la coordonnée y.
Pour aligner le texte avec les graduations, utiliser
dans zone_dessin.create_text
une des
valeurs possibles
de l'option anchor
.
1.g. Classe CourbePolynome
Écrire une classe CourbePolynome
dont le constructeur prend les paramètres
suivants et les stocke en attributs :
- une instance
repere
de la classeRepere
, - une instance
polynome
de la classePolynome
, - un
pas
d'échantillonnage optionnel, valant0.1
par défaut, - une
couleur
de tracé optionnel, valant"blue"
par défaut.
1.h. Affichage de l'équation
Rajouter dans la classe CourbePolynome
une méthode
afficher_equation
qui affiche l'équation du polynôme en haut à gauche
dans la couleur noir.
1.i. Tracé de la courbe
Rajouter dans la classe CourbePolynome
une méthode tracer_courbe
qui trace
la courbe du polynome
dans le repere
en reliant par des segments en
couleur
les points obtenus avec le pas
d'échantillonnage.
Conseil : étant donné que create_line
peut prendre en paramètre des coordonnées
\(x_0,\,y_0,\,x_1,\,y_1,\,x_2,\,y_2,\,\ldots\) pour dessiner une ligne polygonale,
il suffit de mémoriser à la suite toutes les coordonnées calculées dans une liste,
puis les donner à zone_dessin.create_line
en faisant l'expansion de la
liste, comme vu en cours.
-
N'oubliez pas de rajouter
self
avant le ou les paramètres de la méthode. ↩