-2.5 2.5 setxrange
-2.5 2.5 setyrange
/A {0 2} def
/B {-2 0} def
%% syntaxe : A B manip
/manip {
4 copy %% A B A B
4 copy %% A B A B A B
2 3 div hompoint %% A B A B A'
3 1 rollp %% A B A' A B
1 3 div hompoint %% A B A' A"
4 copy %% A B A' A" A' A"
-60 rotatepoint %% A B A' A" A'"
2 -1 rollp %% A B A' A'" A"
4 -1 rollp %% A A' A'" A" B
} def
%% version recursive
%% syntaxe : A B n action
%% ou A et B points et n entier positif ou nul
/action {
%% ouverture d'un dictionnaire pour stocker les variables n, A, A1, A2,
%% et B
5 dict begin
/n exch def
n 0 eq
{
%% si n = 0, on dessine [AB]
1 trait
}
{
%% sinon on appelle avec les nouveaux segments et 1 niveau + bas
manip
/B defpoint
/A3 defpoint
/A2 defpoint
/A1 defpoint
/A defpoint
/n n 1 sub store
A A1 n action
A1 A2 n action
A2 A3 n action
A3 B n action
}
ifelse
end
} def
bleu
[A 6 {2 copy O 60 rotatepoint} repeat] %% on genere un hexagone regulier
%% le nombre 5 designe le niveau de profondeur de la recursivite
{5 action} 2 4 Apply
|