%!PS-Adobe-2.0 %%Pages: 0 1 %%BoundingBox: 0 0 612 792 %%EndComments % Note: two-thirds of the way down, change "fill" to "stroke" % to get stroked braids. % main 3 parameters, with default values /m 7 def % number of poinst on star /delta 0.34 def % width of "tape" /space 0.06 def % gap as one tape goes over another /alf 360 m div def % just angle between points, not a parameter /r 100 def % scale factor /inter { % stack: x1f y1f x2f y2f u1f v1f u2f v2f % intersecting lines: (x-y, u-v) ,returns x and y coords of intersection point /v2f exch def /u2f exch def /v1f exch def /u1f exch def /y2f exch def /x2f exch def /y1f exch def /x1f exch def x1f x2f sub abs 0.000001 lt { /n v2f v1f sub u2f u1f sub div def x1f % return xInter n x1f mul v1f add n u1f mul sub % return yInter } { u1f u2f sub abs 0.000001 lt { /mf y2f y1f sub x2f x1f sub div def u1f % return xInter mf u1f mul y1f add mf x1f mul sub % return yInter } { /mf y2f y1f sub x2f x1f sub div def /n v2f v1f sub u2f u1f sub div def v1f n u1f mul sub y1f sub mf x1f mul add mf n sub div %return xInter mf v1f mul mf n mul u1f mul sub n y1f mul sub mf n mul x1f mul add mf n sub div % return yInter } ifelse } ifelse } def % inter /calcxs { % calcxs: calculate coords for a lot of points /t 1 delta sub def /tp 1 space add def /tq 1 delta sub space sub def /x10 tq alf cos mul def /y10 tq alf sin mul def /x11 tq 3 alf mul cos mul def /y11 tq 3 alf mul sin mul def /x12 2 alf mul cos def /y12 2 alf mul sin def /x13 t 2 alf mul cos mul def /y13 t 2 alf mul sin mul def /x14 t 2 neg alf mul cos mul def /y14 t 2 neg alf mul sin mul def /x15 2 neg alf mul cos def /y15 2 neg alf mul sin def /x16 tp alf neg cos mul def /y16 tp alf neg sin mul def /x17 tp alf cos mul def /y17 tp alf sin mul def /x1 0 cos def /y1 0 sin def x10 y10 x11 y11 x1 y1 x12 y12 inter /y2 exch def /x2 exch def /x4 t 0 cos mul def /y4 t 0 sin mul def x10 y10 x11 y11 x4 y4 x13 y13 inter /y3 exch def /x3 exch def x4 y4 x14 y14 x16 y16 x17 y17 inter /y5 exch def /x5 exch def x1 y1 x15 y15 x16 y16 x17 y17 inter /y6 exch def /x6 exch def %% other delta calculation 1 0 2 alf mul cos 2 alf mul sin alf cos alf sin 3 alf mul cos 3 alf mul sin inter /xSpec exch def /ySpec exch def /delta2 1 xSpec alf cos div sub space alf sin mul sub def } def % calcxs /drawPart { % draw one of m segments of star newpath x1 y1 moveto x2 y2 lineto x3 y3 lineto x4 y4 lineto x5 y5 lineto x6 y6 lineto closepath fill % change to "stroke" to get stroked braids } def % drawPart /printStar { % stack: r space delta xCent yCent m % draw all m segments of star, perhaps redefine parameters /m exch def % number of points of star /alf 360 m div def % just angle between points, not a parameter /yCent exch def % y-coord of center of star /xCent exch def % x-coord of center of star /delta exch def % width of "tape" /space exch def % gap as one tape goes over another /r exch def % scale factor calcxs gsave xCent yCent translate r r scale 1 1 m { pop alf rotate drawPart } for grestore } def %printstar % 1st star: maximum width of tape for a regular star 54 0.06 0.34 70 700 7 printStar % 1st star, but larger 100 0.06 0.34 250 700 7 printStar % 2nd star, narrower tape, with same gap 54 0.06 0.25 70 590 7 printStar % Another star, but larger yet 125 0.03 0.18 460 600 7 printStar % 1st star, but color red 0 1 1 0 setcmykcolor 54 0.06 0.34 70 480 7 printStar % 3rd star, larger, color blue, narrower gap, narrower tape 1 1 0 0 setcmykcolor 80 0.04 0.25 250 520 7 printStar % 8, 9, 10, 11, 12 points, different colors 1 0 1 0 setcmykcolor 54 0.05 0.2575 70 370 8 printStar 1 0 0 0 setcmykcolor 54 0.045 0.2 180 370 9 printStar 0 1 0 0 setcmykcolor 54 0.03 0.1667 290 370 10 printStar 0 0 1 0 setcmykcolor 54 0.025 0.142 400 370 11 printStar 0.5 0.5 1 0 setcmykcolor 54 0.025 0.1123 510 370 12 printStar % Here tape width is set to impossible high value 1 0.5 1 0 setcmykcolor 54 0.04 0.72 70 260 7 printStar 1 0.5 0 0 setcmykcolor 54 0.035 0.556 180 260 8 printStar 0 1 0.5 0 setcmykcolor 54 0.03 0.44 290 260 9 printStar 0 0.5 1 0 setcmykcolor 54 0.025 0.36 400 260 10 printStar 0 0.5 0.5 0 setcmykcolor 54 0.02 0.3 510 260 11 printStar showpage