%%% Start of L-system definition /STARTK { FK plusK plusK FK plusK plusK FK} def /FK { dup 0 eq { DK } % if the recursion order ends, draw forward { 1 sub % recurse 4 {dup} repeat % dup the number of parameters (order) needed. FK minusK FK plusK plusK FK minusK FK } ifelse pop % pop the dup'd order } bind def /angleK 60 def /minusK { % rotation to the right angleK neg rotate } bind def /plusK { % rotation to the left angleK rotate } bind def %%% End of L-System definition /DK { sizeK 3 orderK exp div 0 rlineto } bind def /thicknessK {1 orderK dup mul div} bind def %%% Scaling factors /orderK 3 def /sizeK 300 def %%% Draws a Koch's snowflake of radius 180 at 0 0 /Koch180 { gsave newpath thicknessK setlinewidth 200 300 60 cos mul add neg 200 100 60 sin mul add neg translate 200 200 moveto orderK orderK orderK STARTK stroke closepath grestore } def % receives nothing %%% Draws an arbitrary Koch's snowflake /Koch { /orderK exch store gsave 3 1 roll translate 180 div dup scale rand 360 mod rotate Koch180 grestore } def % Receives x y size order %%% Sample, bounded by an arc 400 400 100 3 Koch newpath 400 400 100 0 360 arc stroke closepath showpage