Aller au contenu principal

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.

Tracé absolu
  • Basé sur les coordonnées (x,y) de chaque point du tracé
  • Effectuer les tracés uniquement à l'aide de la fonction goto()
Tracé relatif
  • 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 NSI s'il n'existe pas déjà
  • Dans le dossier NSI, créer le dossier chapitre_04
  • Dans le dossier chapitre_04 créer le dossier tp1_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()
Cours

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.

Conseil

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.

Coordonnées du mur

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.

Conseil

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.

Coordonnées du toit

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.

Rendu final

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()
Attention

À 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é.

Mouvements pour construire le mur

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.

Rendu final

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.