Proposer une tortue python récursive réalisant :
- Avec n = 0 :
- Avec n = 1 :
- Avec n = 2 :
- Avec n = 3 :
- Avec n = 4 :
- documentation
- un code
On trouvera la doc sur le module turtle ici.
import turtle as tl
from random import randint
def majfenetre(f):
"""fonction decorateur, sert principalement à mettre la fenêtre à jour
pour éviter que le dessin ne sorte de la figure."""
bgx, bgy = 0, 0
hdx, hdy = 0, 0
def g(cote, profondeur, direction, angle):
nonlocal bgx, bgy, hdx, hdy
f(cote, profondeur, direction, angle)
x, y = tl.position()
bgx, bgy = min(bgx, x), min(bgy, y)
hdx, hdy = max(hdx, x), max(hdy, y)
tl.setworldcoordinates(bgx,bgy,hdx,hdy)
# on cache la tortue :
tl.hideturtle()
# on choisit au hasard la couleur :
tl.pencolor((randint(0,255),randint(0,255), randint(0,255)))
# épaisseur du trait :
tl.pensize(2)
# vitesse tortue :
tl.speed(0)
return g
def gosper(cote, profondeur, direction, angle) :
if (profondeur == 0) : tl.forward(cote)
else :
cote /= 2
profondeur -= 1
if(direction == -1) :
gosper(cote,profondeur, -1, angle)
tl.left(angle)
gosper(cote,profondeur, 1, angle)
tl.left(2*angle)
gosper(cote,profondeur, 1, angle)
tl.right(angle)
gosper(cote,profondeur, -1, angle)
tl.right(2*angle)
gosper(cote,profondeur, -1, angle)
gosper(cote,profondeur, -1, angle)
tl.right(angle)
gosper(cote,profondeur, 1, angle)
tl.left(angle)
else :
tl.right(angle)
gosper(cote, profondeur, -1, angle)
tl.left(angle)
gosper(cote, profondeur, 1, angle)
gosper(cote, profondeur, 1, angle)
tl.left(2*angle)
gosper(cote, profondeur, 1, angle)
tl.left(angle)
gosper(cote, profondeur, -1, angle)
tl.right(2*angle)
gosper(cote, profondeur, -1, angle)
tl.right(angle)
gosper(cote, profondeur, 1, angle)
# titre de la fenêtre graphique :
tl.title("Courbe de Gosper")
# dimensions de la fenêtre graphique et position dans l'écran :
tl.setup (width=600, height=600, startx=0, starty=0)
# orientation intiale de la tête : vers la droite de l'écran :
tl.setheading(0)
# pour coder les couleurs en rgb :
tl.colormode(255)
# décorateur pour mise à jour du repère de la fenêtre
# permet de recentrer le graphique dans la fenêtre lorsqu'il en sort :
gosper = majfenetre(gosper)
# on lance gosper :
gosper(cote = 200, profondeur = 3, direction = 1, angle = 60)
# fermeture par clic dans la fenêtre :
tl.exitonclick()