Pavage avec une poursuite de polygone - hexagone (5)
Auteur ou autrice : Maxime Chupin.
Mise en ligne le 13 octobre 2025
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 hexagone.
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(5);
pair poly[];
picture unite;
cote := 5u;
gN := 120;
gV := 0.08;
pair x,y;
x:=2*cosd(360*1/12)*cote*(cosd(360*1/12),sind(360*1/12));
y:=2*cosd(360*1/12)*cote*(cosd(360*1/12),-sind(360*1/12));
unite := image(
for i:=0 upto 5:
poly[i]:=(cote*cosd(360*i/6),cote*sind(360*i/6));
endfor;
poursuite(poly,6,gN,gV);
for i:=0 upto 5:
poly[i]:=(cote*cosd(-360*i/6),cote*sind(-360*i/6))+x;
endfor;
poursuite(poly,6,gN,gV);
);
pavage(unite,2*x,y,3,5);
clip currentpicture to (((0,0)--(5,0)--(5,3)--(0,3)--cycle) shifted (3,-2)
scaled cote);
endfig;
end.
Mots clés : pavagehexagonepolygone
Cet exemple fait partie de la collection d’exemples Pavages avec des poursuites de polygones.