%% auteur :
-0.5 6.5 setxrange
-0.5 6 setyrange
/c 6 def %%côté du triangle
/C {c 0} def %%on dessine le triangle initial en noir
/B {0 0} def
/A {B C -60 rotatepoint} def
/fillstyle {noir fill} def
[A B C ] polygone*
/h 0.75 sqrt def %%hauteur du triangle
/i 0 def %%nombre d'itérations
/min c def %%côté du plus petit triangle
/tri
{
/c 0.5 c mul def
gsave
currentpoint translate %%sommet "vers le haut" du triangle équilatéral
min c gt %%test si "minimum" plus grand que "côté du triangle"
{
/a 0.5 c mul def %%alors on dessine à l'intérieur le triangle équilatéral en blanc
/b h c mul def
newpath
0 a sub 0 b sub smoveto
2 a mul 0 srlineto
0 a sub 0 b sub srlineto
clip
blanc fill
}
{
c tri %%sinon on dessine le triangle blanc supérieur
/a 0.5 c mul def %%on translate à gauche
/b h c mul def
0 a sub 0 b sub smoveto
c tri %%puis on dessine le triangle blanc gauche
/a 0.5 c mul def %%on translate à droite
/b h c mul def
a 0 b sub smoveto
c tri %%puis on dessine le triangle blanc droite
} ifelse
grestore
/c 2 c mul def %% on multiplie par 2 pour réinitialiser le côté c du triangle
}def
/itération
{
c tri %%procédure qui applique la procédure tri au côté du triangle
/min min 2 div def %%à chaque itération le minimum est divisé par 2
}def
A smoveto
i {itération} repeat
|