Page complète Niveau supérieur

Grilles de Hermann

Des points qui scintillent

La figure ci-dessous est une grille de Hermann inversée dont les bords ont été rendus flous (James Bergen). À l'intersection des lignes horizontales et verticales apparaissent des points qui scintillent...
La réalisation de cette image nécessite quelques ajustements, l'effet est sensible à la répartition des gris aux coins des carrés. Il faut ménager la plage sombre dans laquelle se forme l'illusion.

hermann2.mp
% Paramètres d'ajustement de l'image
u = 25;    % unité
v = 0.3;   % indice pour le décrochage du coin des carrés
w = 0.015; % indice pour la profondeur du coin
d = 0.1;   % indice pour le premier niveau de gris
e = 0.2;   % indice pour la variation des gris
n = 5;     % nombre de niveau de gris
 
def f(expr x) =
    x * ( 1 + 4 * e * ( 1 - x) )
enddef;
 
def cadre (expr a,b) =
    (-1+a,-1){dir 180} ... (-1+b,-1+b) ... {dir  90}(-1,-1+a) --
    (-1, 1-a){dir  90} ... (-1+b, 1-b) ... {dir   0}(-1+a, 1) --
    (1-a,  1){dir   0} ... (1-b , 1-b) ... {dir -90}(1 , 1-a) --
    (1, -1+a){dir -90} ... (1-b ,-1+b) ... {dir 180}(1-a, -1) --
    cycle
enddef;
 
picture carre;
carre := image(
            fill ((-1,-1)--(-1,1)--(1,1)--(1,-1)--cycle)
                 scaled u withcolor f(d/(n+d))*white;
            for i:=1 upto n:
                fill cadre(v,w*(5-(i-1)*4/(n-1))) scaled (u-i) 
                   withpen pensquare scaled 1pt
                   withcolor f((i+d)/(n+d))*white;
            endfor;
        );
 
hermann2 (figure 1)
beginfig(1);
    for j:=1 upto 9:
        for h:=1 upto 6:
            draw carre shifted (2*j*u,2*h*u); 
        endfor;
    endfor;    
    draw bbox(currentpicture) withcolor blue;
endfig;
 
end