[comp.lang.postscript] Amusing Program

zwicky@erg.sri.com (Elizabeth Zwicky) (03/29/91)

Inspired by the color PostScript printer we're currently evaluating, I
took my old snowflake program and modified to print 6 snowflakes, each
in 4 colors, on a sheet. Your results are positively guaranteed to
vary; it uses the random number generator heavily... It's actually
surprisingly pretty in monochrome. Never as beautiful as the best ones
in colour, but never quite as bad as the ones that turn out heavily
mustard yellow. See the code for notes on how to make it more
efficient on interpreters that can cope with intricate fills, like
OpenWindows.

----cut here--- no signature on end---------
%!
%% Elizabeth D. Zwicky
%% zwicky@erg.sri.com
%% multiflake

/newflake
{/seed usertime def
seed srand
/strokecolor  [rand 99 mod 100 div 
	       rand 99 mod 100 div
	       100 rand 22 mod sub 100 div] def
/fillcolor  [rand 99 mod 100 div 
	       100 rand 22 mod sub 100 div
	       rand 99 mod 100 div] def
/eofillcolor [rand 99 mod 100 div
		rand 22 mod 100 div
		100 rand 22 mod sub 100 div] def
		
/colorfill {fillcolor aload pop setrgbcolor fill } def
/colorstroke {strokecolor aload pop setrgbcolor stroke } def
/eocolorfill {eofillcolor aload pop setrgbcolor eofill } def
/arm {0 0 moveto
     5 {3 {x y x y x y curveto} repeat} repeat
	  seed srand
	  0 0 moveto
	  5 {3 {x neg y x neg y x neg y curveto} repeat} repeat
	  seed srand
} def

 newpath

0 0 moveto boxsize 0 rlineto 0 boxsize rlineto boxsize neg 0 rlineto
0 0 lineto

rand 99 mod 100 div
100 rand 22 mod sub 100 div
100 rand 22 mod sub 100 div
 sethsbcolor fill
seed srand
boxsize 2 div boxsize 2 div translate

%% If the device you are using can handle complex fills, replace the
%% next three lines with:
%%
%% 6 {arm 60 rotate} repeat
%% gsave colorfill grestore gsave eocolorfill grestore colorstroke
%%
%% This will be not only faster, but prettier. On a LaserWriter or a
%% Tektronix Phaser II PS it gives a limitcheck.

6 {arm 60 rotate colorfill} repeat
6 {arm 60 rotate eocolorfill} repeat
6 {arm 60 rotate} repeat colorstroke
} def

1 setlinewidth
clippath pathbbox /ury exch def /urx exch def /lly exch def /llx exch def
/minsize 250 def
/pagewidth urx llx sub def
/pageheight ury lly sub def
/inwidth pagewidth minsize div def
/inheight pageheight minsize div def

/boxsize 
	inwidth inheight gt
	{pagewidth inwidth truncate div}
	{pageheight inheight truncate div}
	ifelse
def

/inwidth pagewidth boxsize div cvi def
/inheight pageheight boxsize div cvi  def

/x {rand 70 mod abs} def
/y {rand 120 mod abs} def

llx lly translate

inheight {
   inwidth {
	gsave
	newflake
	grestore
	boxsize 0 translate
   } repeat
  boxsize inwidth mul neg boxsize translate
} repeat


showpage