On remarque que les 7 segments de la première courbe donne naissance soit
à la première courbe, soit à la courbe obtenue en faisant le
trajet en sens inverse. On va donc définir deux procédures :
gosperg et gosperd qui réalisent les dessins suivants (avec comme
position de départ de la tortue, le triangle plein et comme position
d'arrivée, le triangle vide) :
On déduit l'écriture de gosperd de celle de gosperg en mettant les instructions de gosperg de la dernière à la première en changeant gauche en droite et réciproqement.
//gosperg(80,3) gosperg(l,n):={ si (n==0) alors avance(l); sinon gosperg(l/2,n-1); tourne_gauche(60); gosperd(l/2,n-1); tourne_gauche(120); gosperd(l/2,n-1); tourne_droite(60); gosperg(l/2,n-1); tourne_droite(120); gosperg(l/2,n-1); gosperg(l/2,n-1); tourne_droite(60); gosperd(l/2,n-1); tourne_gauche(60); fsi; }; gosperd(l,n):={ si (n==0) alors avance(l); sinon tourne_droite(60); gosperg(l/2,n-1); tourne_gauche(60); gosperd(l/2,n-1); gosperd(l/2,n-1); tourne_gauche(120); gosperd(l/2,n-1); tourne_gauche(60); gosperg(l/2,n-1); tourne_droite(120); gosperg(l/2,n-1); tourne_droite(60); gosperd(l/2,n-1); fsi; };On tape :
Autre écriture on choisit les flèches départ et d'arrivée comme ci-dessous mais alors la tortue a changé de direction il faut donc aussi la faire changer de la même direction dans le test d'arrêt. L'écriture de gosperd se fait encore à partir de celle de gosperg, en mettant les instructions de gosperg de la dernière à la première en changeant gauche en droite et réciproqement, et cela même dans le test d'arrêt!!!
//gosperg2(80,3) gosperg2(l,n):={ si (n==0) alors avance(l);tourne_droite(60); sinon gosperg2(l/2,n-1); tourne_gauche(60); gosperd2(l/2,n-1); tourne_gauche(60); gosperd2(l/2,n-1); tourne_droite(60); gosperg2(l/2,n-1); tourne_droite(60); gosperg2(l/2,n-1); tourne_gauche(60); gosperg2(l/2,n-1); tourne_droite(60); gosperd2(l/2,n-1); fsi; }; gosperd2(l,n):={ si (n==0) alors tourne_gauche(60);avance(l); sinon gosperg2(l/2,n-1); tourne_gauche(60); gosperd2(l/2,n-1); tourne_droite(60); gosperd2(l/2,n-1); tourne_gauche(60); gosperd2(l/2,n-1); tourne_gauche(60); gosperg2(l/2,n-1); tourne_droite(60); gosperg2(l/2,n-1); tourne_droite(60); gosperd2(l/2,n-1); fsi; };On tape :
Les procédures ci-dessus se trouvent dans le fichier :
examples/tortue/gosper.cxx