next up previous contents index
suivant: La courbe de Gosper monter: La recursivité sur des précédent: La courbe de Hilbert   Table des matières   Index

Le dragon

0/ Prener une longue bande de papier AB de longueur l : c'est le dragon au jour 0.
1/ Plier cette bande de papier en deux, en amenant B en coincidence avec A par une rotation d'angle + $ \pi$*2 et de centre C, milieu de AB : en dépliant à angle droit, on a le dragon au jour 1.
2/ Replier comme précédemment, puis plier à nouveau en deux, en amenant C en coincidence avec A par une rotation d'angle + $ \pi$*2 : en dépliant à angle droit chaque pliure, on a le dragon au jour 2.
3/ Recommencer tant que la longueur à plier n'est pas trop petite (pour la tortue on s'arrête de plier si l < 10).
Voici les 5 premières étapes :

\begin{pspicture}(0.0000,0.0000)(14,4)
\psset{unit=0.02cm}
\psset{linewidth=.5pt...
...)(380.0000,94.3750)
\psline(380.0000,94.3750)(380.0000,100.0000)
\end{pspicture}

On remarque que le segment AC et le segment CB donne naissance à deux dragons symétriques : on appelle dragong le dragon obtenu par des pliages fait avec une rotation d'angle + $ \pi$*2 et dragond le dragon obtenu par des pliages fait avec une rotation d'angle - $ \pi$*2.
On tape :

//dragong(1800)
dragong(l):={
si (l<10) alors
avance(l);
sinon
dragong(l/2);
tourne_gauche(90);
dragond(l/2);
fsi;
};
dragond(l):={
si (l<10) alors
avance(l);
sinon
dragong(l/2);
tourne_droite(90);
dragond(l/2);
fsi;
}
Ou encore en utilisant une seule procédure dragon2 mais avec un paramètre supplémentaire s (si s=1 on a un dragon gauche et si s=-1 on a un dragon droit).
On tape :
//dragon2(1800,1)
dragon2(l,s):={
si (l<10) alors
avance(l);
sinon
dragon2(l/2,1);
tourne_gauche(90*s);
dragon2(l/2,-1);
fsi;
}

On tape par exemple :
efface();pas_de_cote(-20);dragon2(2880,1)


\begin{pspicture}(0.0000,0.0000)(14,6)
\psset{unit=0.02cm}
\psset{linewidth=.5pt...
...390.0000,205.0000)
\psline(385.0000,190.0000)(390.0000,205.0000)
\end{pspicture}

Ou encore on écrit dragon3 en utilisant le paramètre n profondeur pour faire le test d'arrêt :

//dragon3(1800,1,3)
dragon3(l,s,n):={
si (n==0) alors
avance(l);
sinon
dragon3(l/2,1,n-1);
tourne_gauche(90*s);
dragon3(l/2,-1,n-1);
fsi;
}
Les dessins des 5 premières étapes ont été réalisés en exécutant :
dragon3(90,1,0) puis,
dragon3(90,1,1) puis,
dragon3(90,1,2) puis,
dragon3(90,1,3) puis,
dragon3(90,1,4). Les procédures ci-dessus se trouvent dans le fichier :
examples/tortue/dragon.cxx



Sous-sections
next up previous contents index
suivant: La courbe de Gosper monter: La recursivité sur des précédent: La courbe de Hilbert   Table des matières   Index
Documentation de giac écrite par Renée De Graeve