Pavage avec une poursuite de polygone - triangle (1)

Auteur ou autrice : Maxime Chupin.

Mise en ligne le 13 octobre 2025

Image du résultat de l’exemple

Pavage du plan avec des poursuites de points de polygones. Cette production fait suite au live Twitch de MicMath sur le sujet. Ici, le polygone de base est un triangle.

Code


%@auteur : Maxime Chupin
%@date : 2025-10-12
%@description : Poursuite de polygones, d’après une idée de Mickaël Launay

u:=1cm;

% Thurston
% https://tex.stackexchange.com/questions/136570/metapost-adjust-colour-value-brightness-luminosity
%     0° ou 360° : rouge ;
%     60° : jaune ;
%     120° : vert ;
%     180° : cyan ;
%     240° : bleu ;
%     300° : magenta.
vardef hsv_color(expr h,s,v) =
    % following wikipedia article on "HSL and HSV"
    save chroma, hh, x, m;
    chroma = v*s;
    hh = h/60;
    x  = chroma * (1-abs(hh mod 2 - 1));
    m  = v - chroma;
    if     hh < 1: (chroma,x,0)+(m,m,m)
    elseif hh < 2: (x,chroma,0)+(m,m,m)
    elseif hh < 3: (0,chroma,x)+(m,m,m)
    elseif hh < 4: (0,x,chroma)+(m,m,m)
    elseif hh < 5: (x,0,chroma)+(m,m,m)
    else:          (chroma,0,x)+(m,m,m)
    fi
enddef;

vardef avance(expr A,B,v)=
    v[A,B]
enddef;

vardef polygone(suffix p)(expr n)=
    p[0] for i=1 upto n-1:
        -- p[i]
    endfor
    --cycle
enddef;

vardef poursuite(suffix p)(expr n,N,v)=
    save P;
    pair P;
     
    draw polygone(p,n);
    for i=1 upto N:
        P:=p[0];
        for j=0 upto n-2:
            p[j]:= avance(p[j],p[(j+1) mod n],v);
        endfor;
        poly[n-1]:= avance(p[n-1],P,v);
        draw polygone(p,n);
    endfor;
enddef;

vardef poursuitecouleurs(suffix p)(expr n,N,v,c,d)=
    save P,couleur,ss,vv;
    pair P;
    ss := 0.7;
    vv := 1;
    fill polygone(p,n) withcolor hsv_color(c,ss,vv);
    draw polygone(p,n);
    for i=1 upto N:
        P:=p[0];
        for j=0 upto n-2:
            p[j]:= avance(p[j],p[(j+1) mod n],v);
        endfor;
        poly[n-1]:= avance(p[n-1],P,v);
        couleur := c+sqrt((i/N))*(d-c);
        fill polygone(p,n) withcolor hsv_color(couleur,ss,vv);
        draw polygone(p,n);
    endfor;
enddef;

vardef pavage(expr unite,x,y,Nx,NY)=
    save deplace,i,j;
    pair deplace;
    for i=0 upto Nx-1:
        for j=0 upto NY-1:
            deplace:=i*x + j*y;
            draw unite shifted deplace;
        endfor
    endfor
enddef;

beginfig(1);
    pair poly[];
    picture unite;
    cote = 10u;
    gN = 50;
    gV = 0.1;
    unite := image(
        poly[0]:=(0,0);
        poly[1]:=(cote,0);
        poly[2]:=(cote/2,sqrt(3)/2*cote);
        poursuite(poly,3,gN,gV);
        poly[0]:=(3*cote/2,sqrt(3)/2*cote);;
        poly[1]:=(cote,0);
        poly[2]:=(cote/2,sqrt(3)/2*cote);
        poursuite(poly,3,gN,gV);
    );     
    pair x,y;
    x:=(cote,0);
    y:=(cote/2,sqrt(3)/2*cote);
    pavage(unite,x,y,6,4);
    clip currentpicture to (2*cote,0)--(6*cote,0)--(6*cote,3*sqrt(3)/2*cote)--(2*cote,3*sqrt(3)/2*cote)--cycle;
endfig; 

end.

Mots clés : pavagepolygonetriangle

Cet exemple fait partie de la collection d’exemples Pavages avec des poursuites de polygones.

Fichiers

Télécharger l’archive complète