MetaPost Présentation des sources Retour à la page précédente Archive (source + images) Fichier au format texte pour télécharger Imprimer le document sans le menu !
% JMS - 5 juillet 2003 - Spirale de Fraser 
% Voir : Les illusions des sens - Pour la Science avril/juin 2003
%        Page 38 (illusions géométriques)
% ===============================================================

% unité
u = 15;      

% rayon - la valeur 1.17 est une approximation de la solution
% de l'équation : x - 1 = Pi/20 * sqrt(x) qui permet d'obtenir des 
% dalles proches d'un carré.
def r(expr x) =
    mexp(x * mlog(1.17))
enddef;

% épaisseur des couronnes blanc/noir
def e(expr x) =
    1 + 0.4 * r(x)
enddef;

% point du dallage
def p(expr x,y) =
    u*r(y)*(cosd(x*9),sind(x*9))
enddef;

% point inférieur d'une couronne
def ti(expr x,y) =
    (u*r(y) - (e(y)/2))*(cosd(x*9),sind(x*9))
enddef;
% point inférieur intermédiaire d'une couronne
def tii(expr x,y) =
    (u*r(y) - (e(y)/4))*(cosd(x*9),sind(x*9))
enddef;
% point supérieur d'une couronne
def ts(expr x,y) =
    (u*r(y) + (e(y)/2))*(cosd(x*9),sind(x*9))
enddef;
% point supérieur intermédiaire d'une couronne
def tsi(expr x,y) =
    (u*r(y) + (e(y)/4))*(cosd(x*9),sind(x*9))
enddef;

% cadre de la figure
path cadre;
cadre = ((-1,-1)--(-1,1)--(1,1)--(1,-1)--cycle) scaled (u*r(18));


Conversion de fraser.1 au format PNG
Les arcs noirs, inscrits dans des couronnes concentriques, semblent s'enrouler en spirale, tout comme les arcs blancs. Les dalles sont perçues dans leur organisation en spirale alors qu'il y a aussi une organisation radiale.
beginfig(1);

 fill cadre withcolor red+green;

 for i:=9 upto 21:
    for j:=0 upto 40:
     fill p(j,i+0.05) -- p(j+0.45,i+0.5) -- 
          p(j,i+0.95) -- p(j-0.45,i+0.5) -- cycle
          withcolor red;
    endfor;
 endfor;

 for i:=9 upto 21:
    for j:=0 step 2 until 40:
     jj := if i mod 2 = 0: j else: j-1 fi;
     fill p(jj+0.5,i-0.45) -- p(jj+0.95,i) -- 
          p(jj+0.5,i+0.45) -- p(jj+0.05,i) -- cycle
          withcolor .6 * blue;
    endfor;
    draw fullcircle scaled (2*u*r(i))
         withpen pencircle scaled (e(i))
         withcolor white;
    for j:=0 step 2 until 40:
     jj := if i mod 2 = 0: j+1 else: j fi;
     fill (ti(jj-0.7,i) .. ti(jj-0.35,i) .. ti(jj,i)) --
          (ti(jj,i) .. tii(jj+0.5,i) .. ts(jj+1.7,i)) --
          (ts(jj+1.7,i) .. ts(jj+1.35,i) .. ts(jj+1,i)) --
          (ts(jj+1,i) .. tsi(jj+0.5,i) .. ti(jj-0.7,i)) -- cycle
         withcolor black;
    endfor;
 endfor;

 clip currentpicture to cadre;

endfig;

Conversion de fraser.2 au format PNG
Peu de changement par rapport à l'image précédente, les arcs noirs sont disposés de façon à traverser les dalles bleues plutôt que les dalles jaunes. L'illusion disparaît...
beginfig(2);
 
 fill cadre withcolor red+green;

 for i:=9 upto 21:
    for j:=0 upto 40:
     fill p(j,i+0.05) -- p(j+0.45,i+0.5) -- 
          p(j,i+0.95) -- p(j-0.45,i+0.5) -- cycle
          withcolor red;
    endfor;
 endfor;

 for i:=9 upto 21:
    for j:=0 step 2 until 40:
     jj := if i mod 2 = 0: j else: j-1 fi;
     fill p(jj+0.5,i-0.45) -- p(jj+0.95,i) -- 
          p(jj+0.5,i+0.45) -- p(jj+0.05,i) -- cycle
          withcolor .6 * blue;
    endfor;
    draw fullcircle scaled (2*u*r(i))
         withpen pencircle scaled (e(i))
         withcolor white;
    for j:=0 step 2 until 40:
     jj := if i mod 2 = 0: j else: j-1 fi;
     fill (ti(jj-0.7,i) .. ti(jj-0.35,i) .. ti(jj,i)) --
          (ti(jj,i) .. tii(jj+0.5,i) .. ts(jj+1.7,i)) --
          (ts(jj+1.7,i) .. ts(jj+1.35,i) .. ts(jj+1,i)) --
          (ts(jj+1,i) .. tsi(jj+0.5,i) .. ti(jj-0.7,i)) -- cycle
         withcolor black;
    endfor;
 endfor;
 
 clip currentpicture to cadre;
 
endfig;

end