Le triangle de Sierpinski
Cette courbe apparait après que beaucoup de points soient tracés. La tortue commence au centre du triangle. Elle choisit un des trois sommets du grand triangle au hasard. La tortue se tourne vers ce sommet et place un point à la moitié du trajet pour atteindre ce sommet. Ensuite le procédé recommence, on choisit l'un des trois sommets au hasard et on place un point pile au milieu du trajet etc. Etonnament, un modèle émerge au bout d'un certain nombre de points tracés.
# Commande principale: demarrer
pour new # set defaults, screen, pen et tortue init ftd [400 400] fcfg noir fcc vert levecrayon cachetortue fin pour sier donne "corner choix [ [190 -180] [-190 -180] [0 160] ] # choose corner fixecap vers :corner # turn pour face corner avance (distance :corner)/2 # move half way vers corner baissecrayon avance 0 levecrayon # plot pixel fin pour demarrer new repete 10000 [sier] # repete 10000 times fin |
Triangle de Sierpinski amélioré
Cette fois-ci, la courbe sera coloriée (trouver comment on procède !) et à présent on place chacun des points à l'aide de la primitive fixexy. Pour obtenir une deuxième courbe de Hénon:
pour new # set defaults, screen, pen et tortue init ftd [400 400] fcfg noir fcc vert levecrayon cachetortue fin pour sier donne "corner hasard 3 # choose hasard corner si :corner=0 [plot 190 moins 180 fcc 2] si :corner=1 [plot moins 190 moins 180 fcc 3] si :corner=2 [plot 0 160 fcc 5] fin pour plot :xp :yp donne "xcor (:xcor+:xp)/2 donne "ycor (:ycor+:yp)/2 fixexy :xcor :ycor baissecrayon avance 0 levecrayon # plot pixel fin pour demarrer new donne "xcor 0 donne "ycor 0 # set xcor et ycor pour 0 repete 10000 [sier] # repete 10000 times fin |
Le triangle généralisé
Le premier programme a été réécrit pour pouvoir recréer la courbe à partir de n'importe quel polygone. Tester:
pour new # set defaults, screen, pen et tortue init ftd [400 400] fcfg noir fcc vert levecrayon cachetortue fin pour sier :order :size :frac :ang donne "angle :ang*(hasard :order) # choose hasard corner fixex :frac * ((premier pos) +:size*sin :angle) fixey :frac * ((dernier pos) +:size*cos :angle) baissecrayon avance 0 levecrayon # plot pixel fin pour demarrer :order new donne "size (:order-2)*180 donne "frac 1/(:order-1) donne "ang 360/:order repete 10000 [sier :order :size :frac :ang] # repete 10000 times fin |