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