123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588 |
- %!
- % vasarely
- % Elizabeth D. Zwicky
- % zwicky@sgi.com
- /vasarelysave save def % prevent residual side effects
- %
- % Inspired by Vasarely's experiments with tilting circles and squares
- % (for instance "Tlinko" and "Betelgeuse"
- %% circles
- /part { circle } def /nnrand false def
- %% squares
- % /part { ngon } def /nn 4 def /nnrand false def
- %% random polygons
- % /part { ngon } def /nnrand true def
- %% random stars (not my favorite on this program)
- % /part { nstar } def /nnrand true def
- %% tilt the base shape a random amount?
- /twist false def
- % /twist true def
- /rainbow false def
- %% To make rainbows
- % /rainbow true def
- %% Set this to 1 to go through a full range of colors
- /rainrange .25 def
- % number of different designs per page
- /inheight 2 def
- /inwidth 2 def
- % number of repeats in a design
- /xtimes 10 def
- /ytimes 16 def
- %% This sets the relationship between the two hues: comptwo is maximum contrast
- /colorway {comptwo} def
- %% monochrome comptwo harmtwo harmfour freecolor compthree closeharm
- %% origcolor
- %% This sets the brightness and saturation of the colors; vivid makes
- %% them both bright
- /colorfam {vivid} def
- %% vivid jewel intense medium pastel free orig contrast
- %% medjewel medvivid vivpastel medpastel
- %% Only experts below this point!
- usertime srand
- /seed rand def
- /starcompensate false def
- /constroke 1 def
- /circle {
- /radius radius 1.33 mul def
- currentpoint /herey exch def /herex exch def
- herex herey radius 0 360 arc
- } def
- /ngon{ % polygon of n sides, n determined by nn
- nside 2 div radius rmoveto
- nn cvi {
- nside neg 0 rlineto
- 360 360 nn div sub neg rotate
- } repeat
- closepath
- } def
- /nstar{ % star of n points, n determined by nstarslider
- /radius radius 1.33 mul def
- currentpoint /herey exch def /herex exch def
- 0 radius rmoveto
- 90 nstarangle 2 div add neg rotate
- nn cvi {nstarside 0 rlineto
- 180 180 nstarangle 2 mul sub sub neg rotate
- nstarside 0 rlineto
- 180 180 360 nn div sub nstarangle 2 mul sub sub rotate
- } repeat
- 90 nstarangle 2 div add rotate
- closepath
- } def
- /nstarangle {180 360 nn div sub 3 div} def
- /nstarside {
- 2
- radius
- 1
- 180 nn div
- sin
- div
- div
- mul
- nstarangle sin
- mul
- 180
- nstarangle 2 mul
- sub
- sin
- div
- } def
- /nside {
- 2
- radius
- 360 nn div 2 div tan
- mul
- mul
- } def
- /tan { /alpha exch def
- alpha sin
- 1 alpha sin dup mul sub sqrt
- div
- } def
- /pastel {
- /backbright high def
- /backsat medlow def
- /fillbright high def
- /fillsat medlow def
- /eobright high def
- /eosat medlow def
- constroke 0 eq {
- /strokebright high def
- /strokesat medlow def
- }
- {
- /strokebright low def
- /strokesat high def
- } ifelse
- } def
- /jewel {
- /fillbright med def
- /fillsat high def
- /backbright med def
- /backsat high def
- /eobright med def
- /eosat high def
- constroke 0 eq {
- /strokebright medlow def
- /strokesat high def
- }
- {
- /strokebright high def
- /strokesat medlow def
- } ifelse
- } def
- /vivid {
- /fillsat 1 def
- /fillbright high def
- /eosat 1 def
- /eobright high def
- /backsat 1 def
- /backbright high def
- constroke 0 eq {
- /strokesat 1 def
- /strokebright high def
- }
- {
- /strokesat high def
- /strokebright medlow def
- } ifelse
- } def
- /free {
- /fillsat anyrand def
- /fillbright anyrand def
- /eosat anyrand def
- /eobright anyrand def
- /backsat anyrand def
- /backbright anyrand def
- /strokesat anyrand def
- /strokebright anyrand def
- } def
- /contrast {
- /sat medhigh def
- /bright rand 2 mod 0 eq {medhigh} {medlow} ifelse def
- /backsat sat def
- /backbright bright def
- /eosat sat def
- /eobright 1 bright sub def
- /fillsat sat def
- /fillbright bright def
- /strokebright rand 2 mod def
- /strokesat rand 2 mod def
- } def
- /medium {
- /backsat med def
- /backbright med def
- /eosat med def
- /eobright med def
- /fillsat med def
- /fillbright med def
- /strokebright med def
- /strokesat med def
- } def
- /intense {
- /backsat high def
- /backbright med def
- /eosat high def
- /eobright high def
- /fillsat high def
- /fillbright med def
- /strokebright high def
- /strokesat high def
- } def
- /orig {
- /backsat rand 99 mod 55 add 100 div def
- /backbright rand 99 mod 35 add 100 div def
- /eosat rand 77 mod 22 add 100 div def
- /eobright 90 rand 75 mod sub 15 add 100 div def
- /fillsat 100 rand 90 mod sub 100 div def
- /fillbright 100 rand 45 mod sub 20 add 100 div def
- /strokebright 100 rand 55 mod sub 100 div def
- /strokesat 100 rand 85 mod sub 100 div def
- } def
- /medjewel {
- /alt rand 2 mod def
- /backsat alt 0 eq {high} { med} ifelse def
- /fillsat alt 0 eq {med} {high} ifelse def
- /eosat alt 0 eq {high} {med} ifelse def
- /backbright med def
- /fillbright med def
- /eobright med def
- constroke 0 eq {
- /strokebright medlow def
- /strokesat high def
- }
- {
- /strokebright high def
- /strokesat medlow def
- } ifelse
- } def
- /medvivid {
- /alt rand 2 mod def
- /backsat alt 0 eq {1} { med} ifelse def
- /fillsat alt 0 eq {med} {1} ifelse def
- /eosat alt 0 eq {1} {med} ifelse def
- /backbright alt 0 eq {high} {med} ifelse def
- /eobright alt 0 eq {high} {med} ifelse def
- /fillbright alt 0 eq {med} {high} ifelse def
- constroke 0 eq {
- /strokesat 1 def
- /strokebright high def
- }
- {
- /strokesat high def
- /strokebright medlow def
- } ifelse
- } def
- /vivpastel {
- /backlight rand 2 mod def
- /backsat backlight 0 eq {medlow} {1} ifelse def
- /eosat backlight 0 eq {medlow} {1} ifelse def
- /fillsat backlight 0 eq {1} {medlow} ifelse def
- /fillbright high def
- /backbright high def
- /eobright high def
- constroke 0 eq {
- /strokesat 1 def
- /strokebright high def
- }
- {
- /strokesat high def
- /strokebright medlow def
- } ifelse
- } def
- /medpastel {
- /alt rand 2 mod def
- /backsat alt 0 eq {medlow} {med} ifelse def
- /eosat alt 0 eq {medlow} {med} ifelse def
- /fillsat alt 0 eq {med} {medlow} ifelse def
- /fillbright alt 0 eq { high } {med} ifelse def
- /backbright alt 0 eq {med} { high } ifelse def
- /eobright alt 0 eq {med} { high } ifelse def
- constroke 0 eq {
- /strokebright high def
- /strokesat medlow def
- }
- {
- /strokebright low def
- /strokesat high def
- } ifelse
- } def
- /maxcon {
- rand 2 mod 1 eq {
- /backsat 0 def
- /backbright 0 def
- /eosat 0 def
- /eobright 0 def
- /fillsat 0 def
- /fillbright 1 def
- /strokebright 1 def
- /strokesat 0 def
- }
- {
- /backsat 0 def
- /backbright 1 def
- /eosat 0 def
- /eobright 1 def
- /fillsat 0 def
- /fillbright 0 def
- /strokebright 0 def
- /strokesat 0 def
- }
- ifelse
- } def
- /monochrome {
- /fillhue hue closevary def
- /strokehue hue closevary def
- /eohue hue closevary def
- /backhue hue def
- } def
- /blackandwhite {
- /fillhue 1 def
- /eohue 0 def
- /backhue 0 def
- /strokehue 1 def
- } def
-
- /freecolor {
- /fillhue anyrand def
- /strokehue anyrand def
- /eohue anyrand def
- /backhue anyrand def
- } def
- /purple {
- /fillhue rand 15 mod 80 add 100 div def
- /backhue rand 15 mod 80 add 100 div def
- /strokehue rand 15 mod 80 add 100 div def
- /eohue rand 15 mod 80 add 100 div def
- /backhue rand 15 mod 80 add 100 div def
- } def
- /comptwo {
- /fillhue hue closevary def
- /strokehue hue .5 add dup 1 gt {1 sub} if def
- /backhue strokehue def
- /eohue strokehue closevary def
- } def
- /compthree {
- /backhue hue def
- /strokehue hue 1 3 div add dup 1 gt {1 sub} if closevary def
- /fillhue strokehue closevary def
- /eohue hue 1 3 div sub dup 1 lt { 1 add} if closevary def
- } def
- /origcolor {
- /backhue hue def
- /strokehue
- hue 1000 mul cvi 3 mod dup 1 eq
- {hue closevary}
- {2 eq
- {rand 999 mod 1000 div}
- {hue .5 add dup 1 gt {1 sub} if }
- ifelse
- }
- ifelse def
- /fillhue hue 1000 mul cvi 3 mod dup 1 eq
- {hue closevary}
- {2 eq
- {rand 999 mod 1000 div}
- {hue .5 add dup 1 gt {1 sub} if }
- ifelse
- }
- ifelse
- def
- /eohue hue 1000 mul cvi 2 mod 1 eq
- {hue closevary}
- {rand 999 mod 1000 div}
- ifelse def
- } def
- /harmtwo {
- /fillhue hue closevary def
- /backhue hue def
- /strokehue hue .2 add dup 1 gt {1 sub} if closevary def
- /eohue strokehue closevary def
- } def
- /harmfour {
- /fillhue hue closevary def
- /backhue hue .1 add dup 1 gt {1 sub} if def
- /strokehue hue .2 add dup 1 gt {1 sub} if closevary def
- /eohue hue .1 sub dup 1 lt {1 add} if closevary def
- } def
- /closeharm {
- /fillhue hue def
- /backhue hue .05 add dup 1 gt {1 sub} if closevary def
- /strokehue hue .1 add dup 1 gt {1 sub} if closevary def
- /eohue hue .05 sub dup 0 lt {1 add} if closevary def
- } def
- /high {100 rand 25 mod sub 100 div } def
- /med { rand 33 mod 33 add 100 div } def
- /medhigh {100 rand 50 mod sub 100 div } def
- /medlow {rand 50 mod 100 div } def
- /low { rand 25 mod 100 div} def
- /anyrand { rand 100 mod 100 div } def
- /closevary {rand 70 mod rand 100 mod sub 1000 div add} def
- %rainbow
- % {/colorfill {fillhue 1 1 sethsbcolor fill} def}
- /colorfill {fillhue fillsat fillbright sethsbcolor fill } def
- %ifelse
- /colorstroke {strokehue strokesat strokebright sethsbcolor stroke } def
- /eocolorfill {eohue eosat eobright sethsbcolor eofill } def
- /backfill{ backhue backsat backbright sethsbcolor fill } def
- /xstep { xrange xtimes 1 sub div x 1 sub mul } def
- /ystep { yrange ytimes 1 sub div y 1 sub mul} def
- /functionarray [
- {sin abs}
- {sin }
- {cos }
- {cos abs}
- {sin dup mul }
- {cos dup mul }
- {sin abs sqrt }
- {cos abs sqrt }
- ] def
- /range { /top exch def /bottom exch def /number exch def
- % number is between -1 and 1
- /rangesize top bottom sub def
- number 1 add 2 div
- % number is now between 0 and 1
- rangesize mul
- bottom add
- } def
- /drawone {
- /radius
- width height lt {width 3 div} {height 3 div} ifelse
- def
- seed srand
- 0 0 moveto
- /origmatrix [ 0 0 0 0 0 0 ] currentmatrix def
- [ % xstep function ystep function2 add .4 1.3 range
- 1
- ystep function xstep function add -.25 .25 range
- ystep function3 xstep function2 add -.5 .5 range
- % xstep function4 ystep function mul .4 1.3 range
- 1
- 0
- 0
- ]
- concat
- twist {twistdeg rotate} if
- part colorfill
- origmatrix setmatrix
- rainbow
- {/fillhue fillhue rainrange xtimes ytimes mul div add dup 1 gt {1 sub} if def}
- if
- } def
- /notdrawone {
- seed srand
- twist {/twistdeg rand 360 mod def} if
- nnrand {/nn rand 6 mod 3 add def} if
- /x1 rand width 3 div cvi mod width 8 div add def
- /y1 rand height 3 div cvi mod height 8 div add def
- rand 3 mod dup 1 eq
- {pop /x2 rand width 2 div cvi mod def
- /y2 rand height 2 div cvi mod def}
- { 2 eq
- {/x2 y1 def /y2 x1 def}
- {/x2 y1 width mul height div def /y2 x1 height mul width div def}
- ifelse
- }
- ifelse
- /radius width height gt {width} {height} ifelse 2.5 div def
- /stripe rand width 10 div cvi mod 2 add def
- starcompensate { /stripe stripe 2 mul def /radius radius 10 nn div mul def } if
- /i 1 def
- /repeats radius stripe div cvi 1 add def
- /nnincr 1 def
- repeats {
- colorvary {colorfam colorway} if
- /i i 1 add def
- /radius radius stripe sub def
-
- } repeat
- } def
- /page {
- clippath pathbbox /ury exch def /urx exch def /lly exch def /llx exch
- def
- /pagewidth urx llx sub def
- /pageheight ury lly sub def
- 0 0 moveto
- llx lly translate
- /outerwidth
- pagewidth inwidth div
- def
- /outerheight
- pageheight inheight div
- def
- /width
- outerwidth xtimes div
- def
- /height
- outerheight ytimes div
- def
-
- /size
- width height gt {width} {height} ifelse
- def
- inwidth {
- inheight {
-
- /seed rand def
- /hue rand 999 mod 1000 div def
- colorway colorfam
- /x 1 def /y 1 def
- nnrand {/nn rand 6 mod 3 add def} if
- /twistdeg rand 360 mod def
- /function functionarray rand functionarray length mod get def
- /function2 functionarray rand functionarray length mod get def
- /function3 functionarray rand functionarray length mod get def
- /function4 functionarray rand functionarray length mod get def
- /xrange [ 90 180 270 360 180 360 ] rand 6 mod get def
- /yrange [ 90 180 270 360 180 360 ] rand 6 mod get def
- initclip
- newpath
- 0 0 moveto
- outerwidth 0 rlineto
- 0 outerheight rlineto
- outerwidth neg 0 rlineto
- backfill
- xtimes {
- ytimes{
- /y y 1 add def
- width 2 div height 2 div translate
- drawone
- width 2 div neg height 2 div neg translate
- 0 height translate
- } repeat
- /y 1 def
- /x x 1 add def
- width height ytimes mul neg translate
-
- } repeat
-
- width xtimes mul neg outerheight translate
- } repeat
- outerwidth outerheight inheight mul neg translate
- } repeat
-
- } def
-
- page showpage
- clear cleardictstack
- vasarelysave restore
|