summaryrefslogtreecommitdiff
path: root/tests/ps/vasarely.ps
blob: 9971e06febd57edca225413636b39cba90a910b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
%!
% 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  ptsack 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