Figures simples avec Python

Initiation à Turtle

Que ne peut-on faire avec ce bel outil polyvalent qu’est Python ! Le niveau de cette page est celui de la découverte. Si par exemple vous êtes en classe de seconde elle trouve sa place dans votre programme de SNT. Elle peut aussi s’inscrire dans un rappel de début d’année de première générale. Peut-être avez-vous déjà programmé des exercices de maths ou modifié l’apparence de photos ? Eh bien ici nous tracerons des figures.

Nous supposerons que vous travaillez en mode programme et que vous disposez de la bibliothèque Turtle.

 

Les instructions usuelles de Turtle

Avec Turtle, vous déplacez le curseur (la tortue) dans un plan cartésien en partant de l’origine. Ce déplacement permet soit de tracer (et éventuellement de colorer une zone fermée) soit de juste déplacer le curseur, comme si on levait le crayon. Les instructions principales de tracé sont les suivantes :

Instruction Action
goto(x,y) Aller vers le point de coordonnées \((x\, ;y)\)
forward(d) Avancer sur une distance \(d\)
backward(d) Reculer sur une distance \(d\)
left\(\alpha)\) Pivoter à gauche d’un angle \(\alpha\)
right\(\alpha)\) Pivoter à droite d’un angle \(\alpha\)
circle(r, \(\alpha\)) Tracer un arc de cercle de rayon \(r\) et d’angle \(\alpha\)
up() Relever le crayon
down() Reprendre le dessin

Note : par défaut les angles sont exprimés en degrés, les coordonnées et les distances en pixels.

Quelques instructions supplémentaires :

Instruction Action
color() Sélectionner une couleur
width() Sélectionner une épaisseur de trait en pixels
begin_fill() Activer un remplissage
end-fill() Désactiver un remplissage
fillcolor() Sélectionner une couleur de remplissage

Certaines couleurs sont définissables en toutes lettres, évidemment en anglais. Pour bénéficier de n’importe quelle teinte vous pouvez utiliser le système hexadécimal RVB.

Nous retiendrons deux instructions supplémentaires, title() pour donner un titre au dessin et ht() pour supprimer la tortue de la figure (en fait une petite flèche qui pollue nos belles figures).

 

Sauvegarde

Il est possible que vous ayez du mal à sauvegarder votre œuvre. C’est normal, Turtle ne le permet pas. Il faut ruser en important la bibliothèque Pillow.

Nous ne détaillerons pas l’opération qui dépend en partie de votre éditeur ou de votre EDI. En effet, il faut que le pentagone apparaisse à l’écran. La technique n’est pas très élégante puisqu’elle consiste à faire une capture d’écran pour l’enregistrer sous format PNG (ou autre). En tâtonnant, vous devriez pouvoir sélectionner la zone à sauvegarder (si vous enregistrez tout l’écran, les lignes de code feront partie de l’image !).

 

Exemple 1

Dessinons un pentagone régulier de côté 80. Le trait doit être épais de trois pixels et de couleur rouge.

Avant toute chose, il faut mesurer l’angle d’un pentagone régulier. Soit 360 divisé par 5, c’est-à-dire 72. Si vous n’avez pas encore étudié les boucles bornées :

from turtle import *

# Épaisseur et couleur du trait, tortue cachée
width(3)
color("red")
ht()

# On avance de 80 et on tourne de 72° à gauche (5 fois)
forward(80)
left(72)
forward(80)
left(72)
forward(80)
left(72)
forward(80)
left(72)
forward(80)

Si vous avez étudié les boucles bornées, la fin du programme ressemble à ceci :

# On avance de 80 et on tourne de 72° à gauche (5 fois)
for n in range(5):
    forward(80)
    left(72)

Le dessin ci-dessous n’est pas représenté à l’échelle :

pentagone

Exemple 2

Dessinons le drapeau français. Proportions 2:3. Officiellement, les couleurs RVB sont #000091 pour le bleu France et #E1000F pour le rouge Marianne.

Nous supposerons que le drapeau est réalisé sur un fond blanc et qu’il n’y a pas besoin de s’occuper de la partie centrale. Nous tracerons un trait tout autour pour que celle-ci ressorte. Trois rectangles de \(50 \times 100\) permettent de construire un drapeau avec les bonnes proportions.

from turtle import *

ht()

# tour du drapeau
goto(150,0)
goto(150,100)
goto(0,100)
goto(0,0)

# partie bleue
fillcolor("#000091")
begin_fill()
goto(50,0)
goto(50,100)
goto(0,100)
goto(0,0)
end_fill()

# partie rouge
goto(100,0)
fillcolor("#E1000F")
begin_fill()
goto(150,0)
goto(150,100)
goto(100,100)
goto(100,0)
end_fill()

drapeau français

 

turtle python