Accueil

Traduction

Tutoriel Python - sommaire

Tutoriel Python - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Python : le module turtle ("tortue en français") pour la géométrie

Python propose un module dénommé "turtle" qui permet de dessiner des figures géométriques dans une fenêtre.
Mais avant d'aborder ce module nous allons faire une petite digression : personnaliser l'IDLE (interface de développement).

Personnaliser IDLE

Si vous êtes comme moi, vous trouvez que la taille de police dans l'éditeur est trop petite.
Ce n'est pas compliqué d'agrandir la taille de police, le type de police , etc.
Commande : Options / Configurer IDLE
Exemple : cliquez sur l'onglet "Fonts/Tabs" , déroulez la liste "size" et sélectionnez 12
Vous pouvez aussi cliquer sur l'onglet "highlights" (coloration) pour changer la couleur de texte des commentaires.

Exemple de programme Python reposant sur le module turtle

Turtle signifie en anglais "tortue".
C'est avec ce module que l'on peut réaliser dans Python de jolies figures géométriques.

Le code du premier programme

Commentaires du code

Il faut bien sûr importer le module turtle.
Il faut préciser la vitesse de traçage avec la fonction speed(). Ici vitesse très lente car le paramètre vaut 1.
Ensuite vous retrouvez toujours les mêmes types de commandes : forward(pas), left(angle) , right(angle).
Ne pas oubliez de terminer le programme avec l'instruction mainloop() pour redonner la main à l'utilisateur.

Le rendu du code

Première chose : le graphique ne s'affiche pas dans la fenêtre "Shell" comme pour un programme normal, mais dans une autre fenêtre : "Python turtle graphics".

Le graphique obtenu : tutoriel python

Question : Pour le chemin devienne un polygone (une forme fermée), il faudrait combien de commandes en plus ?
Réponse : deux instructions : un virage à gauche de 90° et un déplacement de 200.

Dessiner un carré

Un carré est un polygone régulier de 4 côtés égaux et 4 angles égaux (angles droits).
Deux exemples de programmes ci-dessous.

Le code du premier exemple

Par défaut la couleur du trait est noir. Ici je demande qu'il soit rouge avec la fonction pencolor().

Le côté du carré désiré est saisi dans la variable c.
Rappel : toute saisie avec la fonction input() est de type string ; il faut donc convertir le contenu de c en un numérique avec la fonction eval().
Ensuite vous avez 4 fois le même couple d'instructions : forward(c) et left(90)
On aurait pu écrire le code d'une façon beaucoup plus correcte sur le plan algorithmique.

Deuxième exemple : un carré de plus en plus grand

Tapez le programme suivant :

A chaque passage dans la boucle l'argument de la commande forward est plus grand de 10. Donc on dessine une sorte de labyrinthe.

Le rendu : tuto python

Dessiner des polygones réguliers

Je veux réaliser un programme très généraliste capable de produire n'importe quel polygone régulier : carré, pentagone, hexagone, octogone, décagone.
Piqure de rappel en matière de géométrie !

Dans tous les cas la somme des "virages à gauche" doit être égale à 360° afin que la tortue revienne à sa position de départ.
Donc pour un carré, chaque "virage à gauche" doit avoir un angle de : 360/4 = 90°
Et pour un pentagone , chaque "virage à gauche" doit avoir un angle de : 360/5 = 72°
etc.

Le code

Commentaires

Il y a un contrôle de saisie basé sur l'opérateur "not in … " : tant que n n'est pas inclus dans la chaine "456810" on peut répéter la saisie.
Pour qu'il y ait au moins un passage dans la boucle, il faut une valeur initiale à n , valeur non comprise dans la chaine "456810".
Le programme est très court grâce à une structure "for i in range(n):".
À la place de mainloop() on peut utiliser l'instruction exitonclick() : si clic sur le graphique, l'utilisateur reprend la main.

Dessiner des cercles et arcs de cercles

Il faut utiliser la fonction cercle(rayon, [angle]).
Le seul argument obligatoire est le rayon.

Exemple : un cercle de plus en plus grand

Tapez le programme suivant :

L'argument de la fonction speed() peut être un entier (entre 0 et 10) mais aussi une chaine : "fast", "normal", "slow", …
Remarque : la tortue tourne à gauche. Si vous voulez qu'elle tourne à droite la valeur du rayon doit être négative.

Dessiner un stade

Stade : un rectangle avec à chaque extrémité deux demi-cercles.

Tapez le programme suivant :

Remplir une surface

Vous pouvez souhaitez que la forme dessinée soit remplie d'une certaine couleur.
Reprenons le programme "tortue_polygone.py" et améliorons le !
Pour réouvrir un programme récemment fermé, vous pouvez dans l'IDLE produire la commande par menu : File/Recent Files...
Sélectionnez tout le code, faites une copie (commande : Edit/copy), créez un nouveau fichier (commande : File/New File) et collez le contenu du presse-papier.

La nouvelle version du programme polygone

Analyse du code

Le programme devient conséquent.

Le rendu

Le graphique obtenu après avoir saisi 5 et 200 : tuto python

C'est joli, vous trouvez pas !

Connaitre la position de la tortue

Code à saisir

Rendu dans la fenêtre shell

En parenthèse la valeur de l'abscisse puis celle de l'ordonnée de chaque angle.

Analyse

La fonction position() retourne les coordonnées x et y de la tortue à un stade donné.
Ce programme s'éxécute dans deux fenêtre : un carré est dessiné dans la fenêtre "graphique" et les affichages se font dans la fenêtre "shell".

On devine que la fenêtre graphique est un repère cartésien (dont les axes sont masqués).
Au départ la tortue est à l'origine du repère cartésien (x=0, y=0)

Donc comme l'origine du repère cartésien est le centre de la fenêtre graphique, l'abscisse et l'ordonnée de la tortue peuvent être des valeurs négatives.

Autre technique pour dessiner

Plutôt que d'utiliser les fonctions forward(), left(), right() nous utilisons la fonction goto(x,y).

Premier exemple

Vous notez que parfois les valeurs de x et y sont négatives.

Capture de la fenêtre "graphique" ci-dessous : tuto python

Remarque

Sans qu'on le demande, on a un segment de l'origine jusqu'au premier angle (-300, -300).

La solution

Pour éviter ce segment disgracieux du point d'origine vers le premier point par le programme, il suffit de "soulever le stylo" ...

Code à taper

Le rendu

tuto python

Nouveautes

Dessiner des triangles

Vous avez vu que dessiner des polynomes réguliers c'est facile. Mais dessiner des triangles demande de faire appel à des notions de géométrie plus avancées ...

Triangle équilatéral

Rappel : un triangle équilatéral est un triangle dont les 3 côtés et les trois angles sont égaux.
Comme la somme des angles d'un triangle est toujours égale à 180°, chaque angle d'un équatéral fait 180/3 = 60°

Le code :

Le rendu : tuto python

Observez bien ce graphique !
La tortue est orientée vers le bas et la gauche.
Donc si vous rajoutiez "forward(200)" le tracé serait orienté vers la gauche et le bas.

Analyse du code :
Le code laisse dubitatif ...
Chaque angle doit faire 60° et pourtant je programme des "left(120)" ...
L'explication est simple : pour former un angle interne de 60° il faut faire effectuer à la tortue un virage très serré de (180° - 60° = 120°). C'est la notion d'angles supplémentaires (somme de deux angles supplémentaires =180°).

Dessiner une étoile à 6 branches

En fait une étoile à 6 branches ("étoile de David") est faite de deux triangles équilatéraux qui se superposent.

Le rendu : tuto python

Il faut donc dessiner le premier triangle équilatéral puis lever le stylo, déplacer la tortue vers le point (0,100) et dessiner le deuxième triangle.

Extrait du code :

Remarque :
Nouvelle instruction : home()
Suite au premier triangle, la tortue était dirigée vers la gauche et vers le bas. Il faut qu'elle soit de nouveau disposée à tracer vers la droite grâce à cette instruction.

Dessiner une étoile à 5 branches

Chaque angle du triangle doit faire 36° (180 / 5).
Donc pour obtenir un angle interne de 36° il faut faire un virage serré à gauche de 144 (180 - 36).

Le rendu : tuto python

Grâce à l'instruction home() la tortue est de nouveau orientée de façon normale et retrouve la position 0,0.
Pensez à cette instruction, si vous devez dans un même graphique enchainer le dessin de plusieurs formes.

Exercice : dessiner un triangle rectangle

Si vous voulez dessiner directement un triangle rectangle ce sera la prise de tête.
En effet vous devriez saisir : le grand côté de l'angle droit puis le petit côté de l'angle droit. Ensuite calculer l'hypothénuse en utilisant le célèbre théorème de Pythagore ( le carré de l'hypoténuse est égal à la somme des carrés des côtés de l'angle droit)
Mais c'est pas tout il faut déterminer les deux autres angles. Il faut donc faire de la trigonométrie (branche des mathématiques qui traite des relations entre distances et angles un triangle rectangle).
Avec Python c'est possible, puisque le module math propose toutes les fonctions trigonométriques.
Mais c'est vraiment se compliquer la vie, il y a beaucoup plus simple : un triangle rectangle est inscrit dans un rectangle.

Il suffit donc de dessiner un rectangle mais de lever le stylo pour ne pas tracer une longueur et une largeur puis de baisser le stylo pour dessiner une diagonale du rectangle (l'hypothènuse du triangle rectangle).

Le rendu : tuto python

Le code :
Je vous communique la fin du code.
J'ai saisi dans la variable "lo" le grand côté et dans la variable "la" le petit côté.

Récupération des programmes

Les programmes de ce chapitre dans un fichier zip