% rose.m4 ifdef(`pstricks_',` define(`PSCUSTOM', `\pscustom[linecolor=black,linewidth=%gpt,fillstyle=solid,fillcolor=gold]{') define(`spt_',`/72.27') \definecolor{gold}{rgb}{1, .84, 0} define(`goldcircle',`psset_(`fillcolor=gold,fillstyle=solid') circle `$1' psset_(fillstyle=none)') define(`rose',`point_(`$2'); CC: (vec_(`$1',0)); rrad = `$3' move to CC tmp = rrad-stripwid {goldcircle(rad rrad at CC)} {goldcircle(rad tmp at CC)} {line to rvec_(rrad,0) chop tmp chop 0 } {line to rvec_(-rrad,0) chop tmp chop 0 } {line to rvec_(0,rrad) chop tmp chop 0 } {line to rvec_(0,-rrad) chop tmp chop 0 } {line from rvec_(-tmp/sqrt(2),-tmp/sqrt(2)) to rvec_(tmp/sqrt(2),tmp/sqrt(2))} {line from rvec_(-tmp/sqrt(2),tmp/sqrt(2)) to rvec_(tmp/sqrt(2),-tmp/sqrt(2))} {goldcircle(rad tmp-stripwid fill_(0) at CC)} command sprintf("PSCUSTOM",stripthick) tmp = last circle.rad/sqrt(2) line from rvec_(-tmp,0) to rvec_(0,-tmp) then to rvec_(tmp,0) \ then to rvec_(0,tmp) then to rvec_(-tmp,0) command "}%" ') .PS scale = 1.2 sector = 360*dtor_/16 exterior = 2.49 outer_circle = exterior-.55 inner_circle = 1.1 spoke_tail = .41 spokethick = 0.09/(1spt_) stripwid = 0.05 stripthick = 1.6/scale midroserad = inner_circle*sin(sector/2)-stripwid/2 outerroserad = outer_circle*sin(sector/4)-stripwid/2 del = 0.05 C: (0,0) circle rad exterior fill_(0) at C goldcircle(rad outer_circle at C) circle rad spoke_tail fill_(0) at C linethick = stripthick for i=0 to 15 do { move to rect_(spoke_tail+1.5*stripwid,sector*i); for j=-1 to 1 by 2 do { {point_(sector*(i+j*.5)) line to rvec_(outer_circle-spoke_tail,0) } { point_(sector*i) move to rvec_(0,j*spokethick spt_) line to rvec_(outer_circle-spoke_tail,0) \ chop outer_circle-inner_circle chop 0 } } X: rect_(inner_circle+midroserad,sector*i) psset_(linecolor=gold) circle rad .25+1.5*stripwid thick 1.5*stripwid/(1spt_)/scale at X psset_(linecolor=black) circle rad .25 + 1.5*stripwid at X circle fill_(0) rad .25 at X for j = -1 to 1 by 2 do { move to X+vec_(.20,j*.14) point_(sector*(i+j*.25)) line to rvec_(1.5*stripwid,0) } goldcircle(rad midroserad*2/3 at X) circle rad midroserad*2/3-stripwid at X line from X to -(midroserad*2/3/(inner_circle+midroserad)) } psset_(linecolor=gold) circle rad spoke_tail+7*stripwid thick 2*stripwid/(1spt_)/scale at C psset_(linecolor=black) psset_(fillstyle=none) circle rad spoke_tail+1.5*stripwid at C for i=5 to 7 do { circle rad spoke_tail+i*stripwid at C } for i=0 to 15 do { rose(inner_circle,sector*i,midroserad) line thick spokethick/scale from C to rect_(outer_circle,sector*(i-.5)) line thick spokethick/scale from C to rect_(outer_circle,sector*i) \ chop inner_circle+midroserad*2 chop 0 for j=-1 to 1 by 2 do { X: rect_(outer_circle+outerroserad-linethick spt_,sector*(i+j*.25)) psset_(linecolor=gold) goldcircle(thick 1/scale rad outerroserad*1/2 at X) psset_(linecolor=black) circle fill_(0) rad outerroserad*1/3 at X point_(sector*(i+j*.25)) line from X to X + vec_(outerroserad,0) rose(outer_circle,sector*(i+j*.25),outerroserad) } } for i=0 to 31 do { move to rect_(exterior-.25,sector*i/2); point_(sector*i/2) command sprintf("PSCUSTOM",stripthick) { line from rvec_(del,3.5*del) to rvec_(-del,0) \ then to rvec_(del,-3.5*del) then to rvec_(del,3.5*del) } command "}%" circle rad stripwid at Here } smrad = .08 for i=0 to 7 do { point_(sector*2*i) move to C + vec_(midroserad+smrad/4,0) { goldcircle(rad smrad at Here)} { goldcircle(rad smrad/2 at Here)} line from rvec_(smrad/2,0) to rvec_(smrad,0) } tmp = midroserad-stripwid goldcircle(rad midroserad at C) goldcircle(rad tmp at C) CQ: circle invis rad tmp-linethick spt_ at C line from CQ.e to CQ.n line from CQ.n to CQ.w line from CQ.w to CQ.s line from CQ.s to CQ.e CQ: circle invis rad distance(last line.c,C) - linethick spt_ at C line from CQ.ne to CQ.nw then to CQ.sw then to CQ.se then to CQ.ne .PE ',`This diagram requires PSTricks')