Rien ne sert de courrir...

PYTHON
DESSINER AVEC TURTLE

Objectif

Il s'agit ici de réaliser des dessins avec la bibliothèque Turtle (tortue en français), de créer des figures basées sur la répétition de polygones en modifiant :

  • Leurs dimensions.
  • Leurs orientations.
  • Leurs positions.

Quelques commandes :

Méthode Paramètres Description
Turtle aucun Crée et renvoie un objet Turtle
forward() distance Déplace la tortue vers l’avant de distance
backward() distance Déplace la tortue vers l’arrière de distance
right() angle Tourne la tortue dans le sens des aiguilles d’une montre
left() angle Tourne la tortue dans le sens contraire des aiguilles d’une montre
penup() aucun Lève le crayon de la tortue
pendown() aucun Abaisse le crayon de la tortue
up() aucun Lève le crayon de la tortue
down() aucun Abaisse le crayon de la tortue
color() nom de couleur Change la couleur de la tortue
fillcolor() nom de couleur Change la couleur de remplissage d’un polygone
heading() aucun Renvoie la direction courante
position() aucun Renvioe la position de la tortue
goto() x, y Déplace la tortue vers la position x, y
begin_fill() aucun Enregistre le premier point d’un polygone a remplir
end_fill() aucun Ferme le polygone et le remplit de la couleur courante
pensize() taille Définit la largeur du trait en pixels
bgcolor() aucun définit la couleur d'arrière plan
speed(0) valeur Maximise la rapidité du tracé
dot() aucun Dessine un point à la position courante
stamp() aucun Dessine la forme de la tortue sur l’écran (stamp = tampon)
shape() shapename Change la forme de la tortue (arrow, classic, turtle, circle)

Comprendre

Dessiner en coordonnées absolues et cartésiennes

  • Coordonnées absolues : Tout point Mi se positionne par rapport à l'origine O du repère.
  • Coordonnées cartésiennes : Tout point Mi se définit par l'abscisse xi et l'ordonnée yi.

Des lignes


from turtle import *

color('#228855')
pensize(3)

up()
goto(0,0)
down()
goto(0,100)
goto(100,100)
goto(100,0)
goto(0,0)
up()

hideturtle()
done()


Une surface


from turtle import *

color('#228855')
begin_fill()

up()
goto(0,0)
down()
goto(0,100)
goto(100,100)
goto(100,0)
goto(0,0)
up()

end_fill()
hideturtle()
done()

Une répétition linéaire


from turtle import *

def carre(x,y):
  cote=40
  color('#228855')
  pensize(3)
  up()
  goto(x,y)
  down()
  goto(x,y+cote)
  goto(x+cote,y+cote)
  goto(x+cote,y)
  goto(x,y)
  up()

for i in range(5):
  for j in range(3):
    carre(i*50,j*50)

hideturtle()
done()

Dessiner en coordonnées relatives et polaires

  • Coordonnées relatives : Tout point Mi se positionne par rapport au point précédent Mi-1.
  • Coordonnées polaires : Tout point Mi se définit par l'angle orienté αi et la distance Ri.

Des lignes


from turtle import *

color('#ee4411')
pensize(3)

up()
goto(0,0)
down()
left(10)
forward(100)
right(20)
forward(100)
right(160)
forward(100)
right(20)
forward(100)
right(170)
up()

hideturtle()
done()

Une surface


from turtle import *

color('#ee4411')
begin_fill()

up()
goto(0,0)
down()
left(10)
forward(120)
right(20)
forward(120)
right(160)
forward(120)
right(20)
forward(120)
right(170)
up()

end_fill()
hideturtle()
done()

Une répétition circulaire


from turtle import *

def losange(a):
  color('#ee4411')
  pensize(3)
  up()
  goto(0,0)
  down()
  left(10+a)
  forward(80)
  right(20)
  forward(80)
  right(160)
  forward(80)
  right(20)
  forward(80)
  right(170+a)
  up()

for i in range(7):
  losange(i*30)

hideturtle()
done()

Pratiquer

Figures à base de losanges

1. Compléter la fonction losange() :

  • Prendre en paramètres la largeur l et la hauteur h du losange.
  • Dessiner un losange centré sur l'origine du repère, aux sommets placés sur les axes du repère.
  • Privilégier les coordonnées absolues et cartésiennes.

from turtle import *

def losange(l,h):
  ...
  
losange(200,100)

hideturtle()
done()

2. Créer des structures répétitives appelant la fonction losange() plusieurs fois pour obtenir des figures similaires à celles présentées ci-dessous. Dans ces exemples, h varie de 20 à 400 avec un pas de 40.

  • 1ère figure :  l = 300
  • 2ème figure :  l = h/2
  • 3ème figure :  l = h - 400

Figures à base de carrés

1. Compléter la fonction carre() :

  • Prendre en paramètres le coté c et l'inclinaison a (en degrés) du carré.
  • Dessiner un carré centré sur l'origine du repère et tourné de l'angle a.
  • Privilégier les coordonnées relatives et polaires.
  • Veiller à ce qu'à la fin, le curseur (la tortue) revienne au centre, orienté vers la droite.

from turtle import *

def carre(c,a):
  ...
  
carre(150,10)

#hideturtle()
done()

2. Créer des structures répétitives appelant la fonction carre() plusieurs fois pour obtenir des figures similaires à celles présentées ci-dessous. Dans ces exemples, a varie de 0 à 280 avec un pas à définir.

  • 1ère figure :   pas = 36   c = 200
  • 2ème figure :  pas = 45   c = c + 40
  • 3ème figure :  pas = 24   c = c × 1,32

from turtle import *

def carre(c,a):
  ...
  
c=15
for a in range(0,280, ... ):
  carre(c,a)
  c = ...

hideturtle()
done()

Figures fractales #

Il est possible de construire assez simplement des fractales avec la tortue :

Ces méthodes utilisent généralement des fonctions récursives qui ne seront abordées qu’en terminale.

Flocon de Koch #

from turtle import *
  speed(0)
  def koch(l,n):
      '''Fractacle de Koch'''
      if n<=0:
          forward(l)
      else:
          koch(l/3,n-1)
          left(60)
          koch(l/3,n-1)
          right(120)
          koch(l/3,n-1)
          left(60)
          koch(l/3,n-1)
  
  def flocon(l,n):
      '''Flocon de Koch'''
      koch(l,n)
      right(120)
      koch(l,n)
      right(120)
      koch(l,n)
      
  flocon(200, 3)
  

Voir ici

Approfondir

A vous de jouer, montrez ce dont vous êtes capable en créant vos propres dessins! Vous trouverez une documentation complète en cliquant sur le lien : https://docs.python.org/fr/3/library/turtle.html

Projet

imaginez un projet graphique utilisant la bibliothèque turtle ainsi qu"au moins une structure de données parmi les listes, les dictionnaires ou csv

Il pourrait être intéressant d'avoir une interaction avec l'utilisateur😉, de créer des formes aléatoire, en insérant des images ...

Voici un bon lien pour approfondir

Il est possible d'utiliser plusieurs tortue , il suffit de créer des objets ( mais ça c'est en term😊)

un indice:

lievre=Turtle()

lievre.forward(1000)

Si vous n'avez pas d'idée, voici un projet clé en main:

Ces projets sont des tutoriels à suivre et qui peuvent vous inspirer.

Suivre la station spatiale internationale #

Pas à pas : suivre l’ISS et dessiner sa position.

Vous n’avez qu’à suivre les instructions ici

La course à la tortue