%!PS-Adobe-2.0 %%BoundingBox: 0 0 600 600 %%EndComments /size 600 def /r {size 2 div 0.9 mul} def /depth 0 def /maxdepth 1 def % change for different versions: 0 for 1 rotor, 1 for 1+6=7 rotors, % 2 for 1+6+6^2=43 rotors, 3 for 1+6+6^2+6^3=259 rotors, 4 for 1+6+6^2+6^3+6^4=1555 rotors /down {/depth depth 1 add def} def /up {/depth depth 1 sub def} def /eps {.03} def % width of the narrow part of rotor arm /del {.12} def % gap between rotors and puzzle /x1 {3 sqrt 3 div r mul} def /y1 {1 3 div r mul} def /y2 {2 3 div r mul} def /thirdminuseps {1 3 div eps sub r mul} def /thirdpluseps {1 3 div eps add r mul} def /oneminusdel {1 del sub r mul} def /y3 {oneminusdel dup mul thirdminuseps dup mul sub sqrt} def /theta {thirdminuseps y3 atan} def /wheel { % draw rotor -- assumes center at 0 0 newpath rand 2147483647 div 6 mul round 60 mul rotate 0 0 r 0 360 arc 1 setgray gsave fill grestore 0 setgray stroke 0 setgray newpath 0 1 2 { x1 y1 thirdminuseps -60 -150 arcn 0 0 thirdpluseps 30 90 arc 0 y2 thirdminuseps -90 -180 arcn 0 0 oneminusdel 90 theta add 150 theta sub arc 120 rotate } for closepath fill newpath % white dot r 0.785 mul 0 r 0.065 mul 0 360 arc 1 setgray fill 0 setgray } def /logo { gsave 1 3 div eps sub 1 3 div eps sub scale down depth maxdepth le { % add six smaller wheels gsave x1 1 3 div eps sub div y1 1 3 div eps sub div translate wheel logo grestore gsave 0 y2 1 3 div eps sub div translate wheel logo grestore gsave x1 1 3 div eps sub div neg y1 1 3 div eps sub div translate wheel logo grestore gsave x1 1 3 div eps sub div neg y1 1 3 div eps sub div neg translate wheel logo grestore gsave 0 y2 1 3 div eps sub div neg translate wheel logo grestore gsave x1 1 3 div eps sub div y1 1 3 div eps sub div neg translate wheel logo grestore } if up grestore } def 5 setlinewidth size 2 div dup translate wheel logo showpage