%% auteur : /k 5 def %% le demi-cote du carre de depart /p .1 def %% p est la proportion utilise a chaque iteration. 0 < p < 1 /n 20 def %% nombre d'iterations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /A {k neg k} def /B {k k} def /C {k k neg} def /D {k neg k neg} def %% syntaxe : A B nouveau_point --> C, tel que (1/p)*vect (AC) = vect (AB) /nouveau_point { dupd %% A, B, A, B vecteur %% A, B, AB p mulv %% A, B, AC exchp %% A, AC, B popp %% A, AC addv %% C } def %% syntaxe : poly nouveau_polygone --> poly /nouveau_polygone { 1 dict begin dup /liste exch def %% on recupere le polygone [ exch %% on en cree un nouveau aload pop %% contenant les points de l'ancien liste 0 get %% et on rajoute le 1er point a la fin liste 1 get %% de la liste ] (nouveau_point) 2 4 Apply end } def [A B C D] n { /fillstyle {cyan fill} def dup polygone* nouveau_polygone /fillstyle {blanc fill} def dup polygone* nouveau_polygone } repeat