Académique Documents
Professionnel Documents
Culture Documents
Outils utilisés
• De quoi prendre des notes personnelles : voir les détails dans les sections suivantes.
• Un ordinateur personnel (de bureau) disponible au lycée où à la maison.
• L’environnement de programmation EduPython.
Organisation
• Penser à prendre des notes personnelles en tenant compte des indications suivantes…
• Conserver une copie des documents fournis pour ce TP (via Moodle) et des documents
numériques qui auront été produits durant la séance (fichiers personnels, scripts, etc.).
• Conserver les notes informatiques produites (éditeur, documents textes, documents graphiques,
etc.), en les enregistrant, soit dans un dossier de votre espace de stockage personnel (souvent
c’est le lecteur H) associé à votre compte utilisateur au lycée (dénommé « compte Kwartz »), soit
sur la zone de stockage des documents personnels de votre espace Moodle.
• Gardez aussi toutes ses productions sur une clef de stockage (ou sur un espace de stockage en
ligne fiable) pour un travail personnel hors séance ou en cas d’impossibilité d’accéder aux
données du serveur. Cette pratique de la sauvegarde de données est très importante.
• Poursuivre les travaux en dehors de la séance en travaillant à son rythme.
Compte rendu
Garder l’ensemble de vos notes manuscrites avec le sujet du TD/TP même si un compte rendu de
vos travaux n’est pas demandé : remarques personnelles et apports présentés au tableau pour des
usages ultérieurs ou dans d’autres domaines d’application.
Pour mettre en œuvre complètement le tracé, nous devons accéder à une description en 3D, mais
le module turtle ne le permet pas : c’est limité à des tracés 2D. Il est donc nécessaire d’utiliser des
fonctions plus adaptées disponibles avec matplotlib.
Nous allons maintenant utiliser des ressources plus avancées de matplotlib pour travailler en
3D. Jusqu’à maintenant, c’est le mode impératif qui a été utilisé pour les tracés : plot() le tracé, puis
les enrichissements (grid, title, xlim, legend, etc) et show() pour faire apparaitre le résultat.
Il est même possible de sauvegarder ses tracés avec la fonction savefig('graphique.png').
Nous allons maintenant utiliser le mode orienté « objet » qui consiste à créer un objet graphique
Python qui est séparé en deux parties :
1. la figure correspond à une unité de visualisation. Une figure peut être ouverte dans une
fenêtre avec fig.show() ou enregistrée dans un fichier avec fig.savefig() ;
2. le système d’axes correspond à une unité d'information ; il est formé d’un repère, d’une
origine et affiche des éléments en fonction de coordonnées pour les graphiques
« classiques ».
Un exemple est donné ci-après.
La première ligne créé l’objet graphique fig avec la fonction figure(). Ceci déclare un
conteneur graphique duquel est extrait le système d’axes ax avec add_subplot(). Puis le tracé est
complété avec plot() qui agit sur ax et un quadrillage est ajouté à ax avec grid(). Enfin un titre
avec set_title() qui remplace la fonction avec title(). En général, cette syntaxe set_xxx où
xxx est le nom de la fonction est d’usage avec les usages orientés objet. Pour terminer, l’instruction
show() n’est plus présente.
C’est de cette manière que nous allons maintenant gérer les tracés graphiques.
La fonction de création d’un rectangle va être adaptée en plongeant le tracé dans un espace 3D.
Cette fonction sera nommée rectangle(). P est alors un triplet ("" , $" , %" ).
Q.3 En s’inspirant des acquis précédents, rédiger un script permettant le tracé du terrain de football
dans le plan % = %" = 0 à l’aide de la fonction plotPlayGround() sans argument.
L’origine du repère sera toujours : ("" , $" , %" ) = (0, 0, 0) et la boîte de tracé sera aussi
générée. Pour commencer, initialiser le graphique avec cette ligne :
ax = plt.figure(figsize=(8, 8),
layout='constrained').add_subplot(projection='3d') # Sur 1 ligne
Remarque : utiliser maintenant les fonctions set_xlim, set_ylim et set_zlim.
Tester ce script, puis, pour ceux qui sont les plus avancés, ajuster les couleurs des tracés.
Compléter la construction avec un rectangle situé à l’altitude maximale paramétrable hmax
(20 m) en s’assurant de toujours laisser apparaître l’origine sur le tracé.
Q.4 Rédiger une ligne de script qui permet d’afficher le ballon au point 3("# , $# , %# ) avec des
coordonnées choisies de manière à éprouver le tracé par plusieurs essais quand le point est
dans la boite ou pas. Le ballon sera marqué par un cercle coloré en rouge : directive de
plot() :'ro' (Cf. annexe).
Q.5 Compléter le script précédent pour afficher la ligne de projection du point du ballon dans le
plan % = 0 en traits interrompus bleus : directives de plot() :'--b' (Cf. annexe).
Nous allons maintenant mettre en œuvre une procédure permettant de contrôler si le ballon est
dans la zone de jeu, c’est-à-dire dans le cylindre à base rectangulaire délimité par le rectangle du
terrain et de hauteur hmax déjà affectée.
Pour effectuer ce contrôle, nous allons créer la fonction dont l’entête prototype est le suivant :
def isInPlayGround(x, y, z:float) -> bool:
où x, y et z sont les coordonnées du point (le ballon) et qui renvoie la valeur de vérité suivant
que le ballon est dans le cylindre précédent ou pas.
Q.7 Rédiger un script de la fonction pointGen() dont l’entête prototype est le suivant :
def pointGen() -> tuple of 3 float:
où tuple est un triplet représentant les coordonnées du point généré. Les points générés devront
être situés dans la boîte de travail.
Mettre en œuvre cette fonction pour générer quelques points d’essais dans et hors de la zone
valide.
Q.8 Dans le corps du programme (hors zone de fonction car il n’y en a aucune à construire),
rédiger une portion de script permettant de générer une cinquantaine de points aléatoires et de
les placer sur le graphe en utilisant la méthode précédente, mais dans la couleur de leur
statut : en vert si le point est dans la zone du jeu et en rouge sinon.
16 ,5m
Surface de
réparation
5, 5m
But
7, 3m x 2,4m
11 m 9, 15m 40 ,3m
9, 15m
Point de
Penalty
45-90m
5, 5m
11 m
1m
Reprendre enfin toute cette étude pour tracer un terrain de tennis, y placer un filet, générer des
points représentant des balles et générer des trajectoires pour lesquelles :
• les points d’impact des balles sur le sol sont matérialisées par une couleur ;
• les points d’impact des balles sur le filet sont matérialisées par une autre couleur ;
• etc., suivant les goûts et les idées.
Question Q.4, autre étape Question Q.5, autre étape (buts ajoutés)
Question Q.4, autre étape Question Q.5, autre étape (buts ajoutés)
Cette fonction permet de tracer des lignes entre deux points et/ou des marqueurs sur les points. Ils
peuvent être placés dans deux listes x et y de même taille qui sont des arguments la fonction (un dans
l’énumération *args des arguments en nombre quelconque, séparés par des virgules comme le veut
la syntaxe Python). Chaque point a pour coordonnées x[i] et y[i] où i est l’indice du point dans la
liste. Voici quelques exemple :
>>> plot(x, y) # plot x and y using default line style and color
>>> plot(x, y, 'bo') # plot x and y using blue circle markers
>>> plot(y) # plot y using x as index array 0..N-1
>>> plot(y, 'r+') # ditto, but with red plusses
Un certain nombre de groupes de formatage (fmt) de x, y peut être précisé comme dans cet exemple :
a.plot(x1, y1, 'g^', x2, y2, 'g-')
Affichage du graphique
Les graphiques utilisent la fonction plot() pour préparer le tracé, après quoi il est nécessaire de le
concrétiser en le déclenchant grâce à la fonction show() utilisée sans argument (Voir exemples).
plt.plot([1, 4, 3, 5])
plt.ylabel('des nombres')
plt.show()