🖍️ Dessiner⚓︎
Présentation de deux outils graphiques complémentaires pour Python
- Turtle1 permet de tracer des figures, la trace qu'une tortue aurait pu laisser suite à des instructions comme « avance de 10 m, tourne à droite de 20°, avance de 5 m ... ».
- DrawSvg2 permet de construire des images vectorielles en ajoutant des formes géométriques élémentaires définies à partir de coordonnées.
Turtle⚓︎
Blockly Games
Avant Python, il est recommandé de commencer la tortue avec Blockly Games3.
Voici une version en local ← cliquer ici !
Fonctions élémentaires⚓︎
Les coordonnées, les distances et les angles sont des nombres entiers ou flottants.
Les plus importantes
forward(distance)
: Avance la tortue de ladistance
spécifiée, dans la direction où elle se dirige.backward(distance)
: Déplace la tortue dedistance
vers l'arrière (dans le sens opposé à celui vers lequel elle pointe). Ne change pas le cap de la tortue.right(angle)
: Tourne la tortue à droite deangle
degrés.left(angle)
: Tourne la tortue à gauche deangle
degrés.
Autres élémentaires
pendown()
: Baisse la pointe du stylo — dessine quand il se déplace.penup()
: Lève la pointe du stylo — pas de dessin quand il se déplace.pensize(epaisseur)
: Règle l'epaisseur
de la ligne.position()
: Renvoie la position actuelle de la tortue(x, y)
.goto(x, y)
ougoto((x, y))
: Déplace la tortue vers une position absolue. Si le stylo est en bas, trace une ligne. Ne change pas l'orientation de la tortue.heading()
: Renvoie le cap de la tortue.setheading(angle)
: Règle le cap de la tortue à la valeurangle
.0
pour l'Est,90
pour le Nord,180
pour l'Ouest,270
pour le Sud...speed(vitesse)
: Règle la vitesse de 1 (lente) à 11 (la plus rapide).stamp()
: Tamponne une copie de la forme de la tortue sur le canevas à la position actuelle de la tortue.
Dans la documentation, on pourra trouver quelques variations, inutiles pour commencer.
Fonctions moins élémentaires⚓︎
Il faudra lire la documentation attentivement.
circle
: pour tracer des approximations de cercles ou des polygones réguliers.towards
: pour calculer un cap.distance
: pour calculer une distance.color
: pour ce qui concerne les couleurs.
Il y a encore d'autres fonctions...
Exercice : Spirale⚓︎
Cette spirale est composée de demi-cercles de rayons croissants.
import turtle
turtle.pensize(3) # épaisseur du trait
turtle.speed(10) # tortue rapide
n = 10
rayon = 0
for k in range(n):
rayon += 10 # le rayon augmente à chaque tour
turtle.circle(rayon, 180) # un demi-cercle
turtle.stamp() # pour laisser une marque de la tortue
turtle.done()
Exercice
Construire avec Basthon une image de spirale composée de quarts de cercles de rayons décroissants, comme celle-ci :
drawSvg⚓︎
drawSvg permet de créer des images vectorielles avec Python en suivant le format des images SVG.
Installation
Pour l'utiliser, l'administrateur l'installe avec :
$ pip install drawSvg
Noter le
S
capital.
Utilisation sans installer
- Pour l'utiliser sans installation, on peut aller sur JupyterLite, un carnet Jupyter en ligne.
On ajoutera alors une première cellule :
import piplite
await piplite.install('drawSvg')
On pourra ainsi réaliser les figures demandées dans des cellules différentes.
Principe
Pour les premières constructions, on définit une zone (Drawing
) de la figure ; un rectangle dont on donne la largeur et la hauteur, des flottants.
- Les points sont repérés avec des coordonnées cartésiennes
(x, y)
. Il n'y a pas de notion de pixel, les coordonnées peuvent parfaitement être des flottants. - Par défaut, l'origine est en bas à gauche, mais on peut la centrer, ou la décaler.
import drawSvg as draw
LARGEUR, HAUTEUR = 700.0, 500.0
figure = draw.Drawing(LARGEUR, HAUTEUR)
x, y, r = 0.0, 0.0, 300.0
figure.append(draw.Circle(x, y, r, fill='black'))
figure.append(draw.Circle(x, y, r/2, fill='blue'))
figure.saveSvg('fig_1.svg')
figure # pour la voir dans le carnet
import drawSvg as draw
LARGEUR, HAUTEUR = 700.0, 500.0
figure = draw.Drawing(LARGEUR, HAUTEUR, origin='center')
x, y, r = 0.0, 0.0, 300.0
figure.append(draw.Circle(x, y, r, fill='black'))
figure.append(draw.Circle(x, y, r/2, fill='blue'))
figure.saveSvg('fig_2.svg')
figure # pour la voir dans le carnet
import drawSvg as draw
LARGEUR, HAUTEUR = 700.0, 500.0
figure = draw.Drawing(LARGEUR, HAUTEUR, origin=(-100.0, -100.0))
x, y, r = 0.0, 0.0, 300.0
figure.append(draw.Circle(x, y, r, fill='black'))
figure.append(draw.Circle(x, y, r/2, fill='blue'))
figure.saveSvg('fig_3.svg')
figure # pour la voir dans le carnet
-
Documentation de la bibliothèque
turtle
: Tortue graphique ↩ -
Dépôt GitHub
et documentation de drawSvg
: génération d'images vectorielles avec Python ↩ -
Jeux pour les programmeurs de demain : Blockly Games ↩