Une grille élastique
Imaginer une grille élastique. Lorsqu'elle n'est pas déformée, elle semble composée de cellules carrées régulières. Appliquer une déformation et alors chaque cellule se retrouve étirée ou tordue.
# Commande principale: demarrer
pour new # set defaults, screen, pen et tortue init ftd [400 400] fcfg noir fcc vert levecrayon cachetortue fin pour gridpos :i :j :size donne "x (:i/(0.5*:size))-1 donne "y (:j/(0.5*:size))-1 donne "rect function :x :y retourne liste 180*premier :rect 180*dernier :rect fin pour function :x :y retourne liste :x :y #unchanged fin pour demarrer new fcc vert donne "size 19 #increase (eg 29) repetepour finer grid repetepour [l 0 1] [ repetepour phrase liste "i 0 :size [levecrayon repetepour phrase liste "j 0 :size [ si :l=0 [ #vertical lines fpos gridpos :i :j :size baissecrayon] si :l=1 [ #horizontal lines fpos gridpos :j :i :size baissecrayon] ]]] fin |
pour Function :X :Y si :X< 0 [donne "XSign Moins 1][donne "XSign 1] si :Y< 0 [donne "YSign Moins 1][donne "YSign 1] donne "X Puissance :X 2 donne "Y Puissance :Y 2 retourne Liste :XSign*:X :YSign*:Y Fin pour Function :X :Y donne "X :X + 0.05 * Sin 360* :Y donne "Y :Y + 0.05 * Cos 360* :X retourne Liste :X :Y fin |
pour PtoR :RadDist :Theta # convert polar to rectangular donne "X :RadDist * Sin :Theta donne "Y :RadDist * Cos :Theta retourne Liste :X :Y fin pour RtoP :X :Y # uses a second turtle to convert rectangular to polar fixetortue 1 lc FixeXY :X :Y donne "RadDist racine ((Puissance :X 2) + (Puissance :Y 2)) FixeCap Vers [0 0] donne "myHeading cap fixeTortue 0 retourne Liste :RadDist :myHeading+180 fin |
pour Function :X :Y donne "Polar RtoP :X :Y donne "RadDist premier :Polar donne "Theta dernier :Polar si :RadDist <1 [ donne "RadDist Puissance :RadDist 0.4] #change 0.4 to 2 retourne PtoR :RadDist :Theta fin pour Function :X :Y donne "Polar RtoP :X :Y donne "RadDist premier :Polar donne "Theta dernier :Polar si :RadDist <1 [ donne "Theta :Theta-100*(1-:RadDist)] #change 100 to 200 retourne PtoR :RadDist :Theta fin pour Function :X :Y donne "Polar RtoP :X :Y donne "RadDist premier :Polar donne "Theta dernier :Polar donne "RadDist Puissance :RadDist 0.4 retourne PtoR :RadDist :Theta fin |