Méthodes de tracé
Introduction
Dans le cadre de ces travaux pratiques, nous allons étudier deux méthodes de tracé sous Turtle. La première méthode, que nous appellerons tracé absolu, consiste à effectuer les tracés uniquement sur la base des coordonnées de points dans le plan. La seconde méthode, que nous appellerons tracé relatif, consiste à effectuer les tracés uniquement sur la base des déplacements et de l'orientation de la tortue.
- Basé sur les coordonnées (x,y) de chaque point du tracé
- Effectuer les tracés uniquement à l'aide de la fonction
goto()
- Basé sur les déplacements et l'orientation de la tortue
- Effectuer les tracés uniquement à l'aide des fonctions
forward(),backward(),left(),right()
Préparation
Arborescence
Avant de commencer, vous allez mettre à jour le dossier de travail dédié à la spécialité NSI.
Ordinateurs du lycée
Si vous travaillez sur les ordinateurs du lycée, votre dossier de travail doit être placé dans votre zone personnelle. Celle-ci est accessible de plusieurs manières :
- Directement depuis le bureau en cliquant sur l'icône intitulée Zone personnelle
- Depuis l'Exportateur Windows en allant dans Bureau puis Zone personnelle
- Depuis l'Explorateur Windows en allant dans le lecteur réseau
P:
Ordinateur de la région
Si vous travaillez sur l'ordinateur portable de la région, vous êtes libre de choisir l'emplacement de votre répertoire de travail.
Mise à jour de l'espace de travail
- Créer le dossier
NSIs'il n'existe pas déjà - Dans le dossier
NSI, créer le dossierchapitre_04 - Dans le dossier
chapitre_04créer le dossiertp1_methodes_tracé
Téléchargement
- Télécharger les fichiers nécessaires à ces travaux pratiques en cliquant ici
- Décompresser l'archive zip
- Copier ou déplacer les fichiers dans le dossier
NSI/chapitre_04/tp1_methodes_tracé
Tracé absolu
Principe
- Basé sur les coordonnées (x,y) de chaque point du tracé
- Effectuer les tracés uniquement à l'aide de la fonction
goto()
Démarrage
Consigne
- Lancer l'application Thonny
- Ouvrir le fichier
paysage_absolu.py
Description du fichier
Le fichier contient la définition de 4 procédures :
mur()toit()maison()dessiner_paysage()
Pour rappel, une procédure désigne une fonction ne retournant aucune valeur.
Chaque procédure est en charge d'un tracé allant du plus spécifique avec les éléments mur() et toit(), au plus général avec dessiner_paysage().
Chacune dispose d'une Docstring décriant le comportement attendu et le rôle de chaque paramètre.
Les procédures mur() et toit() ne disposent que des commandes de positionnement de la tortue, mais pas des commandes du tracé.
Les procédures maison() et dessiner_paysage() ne disposent que de l'instruction pass.
Cette instruction, spécifique au langage Python, signifie "ne rien faire".
Elle est généralement utilisée pour signaler des blocs de code à écrire et ainsi éviter que l'interpréteur ne signale une erreur.
En effet, il n'est pas autorisé en Python de définir une fonction vide.
Tester un module
Vous remarquerez en fin de fichier les lignes suivantes :
if __name__ == "__main__":
mur(0, 0, 200, 100)
toit(-300, 0, 200, 100)
turtle.mainloop()
Mais quelle est la finalité l'expression __name__ == "__main__" ?
Il faut savoir que Python définit une variable __name__ automatiquement pour chaque module. Il y a deux cas possible :
Lancement du programme depuis paysage_absolu.py
Si un fichier .py est utilisé comme point de départ du programme, alors la valeur de __name__ sera la chaîne "__main__".
Ainsi, si on lance l'interpréteur Python à partir du fichier paysage_absolu.py, alors la valeur de __name__ à l'intérieur de paysage_absolu.py sera "__main__".
Import du fichier paysage_absolu.py
Si un fichier .py est importé en tant que module, la valeur de __name__ sera le nom du module importé.
Ainsi, si on importe paysage_absolu la valeur de __name__ à l'intérieur de paysage_absolu.py sera "paysage_absolu".
Dans le cadre de ces travaux pratiques, le point de départ du programme final sera le fichier main.py d'où sera importé paysage_absolu.
Mais avant d'en arriver là, nous souhaiterions disposer de tests des fonctions du module paysage_absolu.
C'est le rôle de ces quelques lignes à la fin du fichier paysage_absolu.py.
Exercice 1 - Factoriser
La portion de code ci-dessous permet de positionner la tortue aux coordonnées (x, y) :
turtle.pu()
turtle.goto(x, y)
turtle.pd()
Ce code étant utilisé à plusieurs reprises, il serait judicieux de le factoriser. Créer la procédure positionner()
ayant deux paramètres x et y correspondant aux nouvelles coordonnées de la tortue.
Exercice 2 - Les éléments
Tracé d'un mur
Coder la procédure mur(). Pour cela, il est nécessaire d'identifier les opérations nécessaires au calcul des coordonnées des points A, B, C et D.
La Docstring précise que les paramètres x et y correspondent aux coordonnées du coin inférieur gauche du mur, donc le point A.
Déduire les coordonnées des autres points par rapport au point A en utilisant les paramètres hauteur et largeur.

Tracé d'un toit
Coder la procédure toit(). Pour cela, il est nécessaire d'identifier les opérations nécessaires au calcul des coordonnées des points A, B, C.
La Docstring précise que les paramètres x et y correspondent aux coordonnées du coin inférieur gauche du mur, donc le point A.
Déduire les coordonnées des autres points par rapport au point A en utilisant les paramètres hauteur et base.

Exercice 3 - L'objet
Tracé d'une maison
Compléter la procédure maison() en suivant la description donnée par la Docstring et en utilisant les procédures mur() et toit().
Tracé paramétrable d'une maison
Modifier la procédure maison() de façon à pouvoir passer en argument le nombre d'étages de la maison grâce au paramètre etage.
Ci-dessous le rendu généré par les tests avec le rendu d'une maison à deux étages.

Exercice 4 - Le paysage
Compléter la procédure dessiner_paysage() en suivant la description donnée par la Docstring.
Les tests de cette procédure devront cette fois s'effectuer depuis le fichier main.py.
Tracé relatif
Principe
- Basé sur les déplacements et l'orientation de la tortue
- Effectuer les tracés uniquement à l'aide des fonctions
forward(),backward(),left(),right()
À la fin du tracé de chaque forme, vous devez vous assurer que la tortue retrouve la même position et la même orientation qu'au départ du tracé.
Démarrage
Consigne
- Lancer l'application Thonny
- Ouvrir le fichier
paysage_relatif.py
Description du fichier
Le fichier contient la définition de 4 procédures :
mur()toit()maison()dessiner_paysage()
Vous remarquerez que cette fois, les procédures mur(), toit() et maison() ne disposent pas des paramètres x et y.
C'est parce que le tracé se fait depuis la position courante de la tortue en utilisant uniquement les fonctions forward(), backward(), left(), right()
Exercice 5 - Les éléments
Tracé d'un mur
Coder la procédure mur(). Pour cela, il est nécessaire d'identifier les mouvements de la tortue nécessaires pour effectuer le tracé.

Tracé d'un toit
Coder la procédure toit(). Pour cela, il est nécessaire d'identifier les mouvements de la tortue nécessaires pour effectuer le tracé.
Certaines longueurs et certains angles de rotation devront être calculé. Un commentaire a été ajouté pour vous aider ainsi que du code à compléter.
# B
# /|\
# / | \
# / | \
# A--C--D
#
# *** Longueurs ***
# AC = base/2
# BC = hauteur
# AB² = AC² + BC²
#
# *** Angles ***
# tan(ABC) = AC/BC
# BAC = 180-90-ABC
# ABD = 2 * ABC
Exercice 6 - L'objet
Tracé d'une maison
Compléter la procédure maison() en suivant la description donnée par la Docstring et en utilisant les procédures mur() et toit().
Tracé paramétrable d'une maison
Modifier la procédure maison() de façon à pouvoir passer en argument le nombre d'étages de la maison grâce au paramètre etage.
Ci-dessous le rendu généré par les tests avec le rendu d'une maison à deux étages.

Exercice 7 - Le paysage
Compléter la procédure dessiner_paysage() en suivant la description donnée par la Docstring.
Les tests de cette procédure devront cette fois s'effectuer depuis le fichier main.py.