PS
# rose.m4
gen_init
ifelse(
ifpstricks(T)`'ifmpost(T)`'ifpostscript(T)`'ifpdf(T)`'ifpgf(T)`'ifsvg(T),,
`This diagram is for PSTricks, postscript, PDF, MetaPost, or svg',
`

scale = 1.25
Rose: [
define(`gold_',`1,0.84,0')

define(`rose',`point_(`$2'); CC: (vec_(`$1',0)); rrad = `$3'
 move to CC
 tmp =  rrad-stripwid
 {circle shaded rgbstring(gold_) rad rrad-sthick at CC}
 {circle shaded rgbstring(gold_) rad tmp-sthick 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))}
 {circle shaded rgbstring(gold_) rad tmp-stripwid-sthick at CC}
 tmp = last circle.rad/sqrt(2)
 line thick stripthick from rvec_(-tmp,0) to rvec_(0,-tmp) \
   then to rvec_(tmp,0) then to rvec_(0,tmp) then to rvec_(-tmp,0) \
   shaded rgbstring(gold_)
 ')

define(`spt_',`/72.27')

[ lsk = 1.2
 sector = 360*dtor_/16
 exterior = 2.49
 outer_circle = exterior-0.55
 inner_circle = 1.1
 spoke_tail = 0.41
 spokethick = 0.09/(1spt_) # points
 stripwid = 0.05
 stripthick = 1.6/1.2
 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
 circle shaded rgbstring(gold_) rad outer_circle at C
 circle rad spoke_tail fill_(0) at C
 linethick = stripthick
 sthick = linethick/2 spt_
 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*0.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
       }
     }
   crad =  0.25 +1.5*stripwid
   cthick =  1.5*stripwid/(1spt_)
   X: rect_(inner_circle+midroserad,sector*i)
   circle outlined rgbstring(gold_) rad crad-(cthick/2 spt_) thick cthick at X
   circle rad crad - sthick at X
   }
 for i=0 to 15 do {
   X: rect_(inner_circle+midroserad,sector*i)
   circle fill_(0) rad crad-1.5*stripwid-sthick at X

   for j = -1 to 1 by 2 do { move to X+vec_(0.20,j*0.14)
     point_(sector*(i+j*0.25))
     line to rvec_(1.5*stripwid,0) }

   circle shaded rgbstring(gold_) rad midroserad*2/3-sthick at X
   circle rad midroserad*2/3-stripwid-sthick at X
   line from X to -(midroserad*2/3/(inner_circle+midroserad))<X,C>
   }

 crad = spoke_tail+7*stripwid
 cthick = 2*stripwid/(1spt_)
 circle outlined rgbstring(gold_) rad crad-cthick/2 spt_ thick cthick at C
 circle rad spoke_tail+1.5*stripwid-sthick at C
 for i=5 to 7 do { circle rad spoke_tail+i*stripwid-sthick at C }
                              # Spokes and roses
 for i=0 to 15 do {
   rose(inner_circle,sector*i,midroserad)
   line thick spokethick/lsk from C to rect_(outer_circle,sector*(i-0.5))
   line thick spokethick/lsk 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*0.25))
     linethick = 1/lsk
     circle colored rgbstring(gold_) rad outerroserad*1/2-1/lsk/2 spt_ at X
     linethick = stripthick
     circle fill_(0) rad outerroserad*1/3-sthick at X
     point_(sector*(i+j*0.25))
     line from X to X + vec_(outerroserad,0)
     rose(outer_circle,sector*(i+j*0.25),outerroserad)
     }
   }
                              # Outer decorations
 for i=0 to 31 do {
   move to rect_(exterior-0.25,sector*i/2); point_(sector*i/2)
   { line thick stripthick from rvec_(del,3.5*del) to rvec_(-del,0) \
       then to rvec_(del,-3.5*del) then to rvec_(del,3.5*del) \
        shaded rgbstring(gold_) }
   circle rad stripwid-sthick at Here
   }
 smrad = 0.08
 for i=0 to 7 do {
   point_(sector*2*i)
   move to C + vec_(midroserad+smrad/4,0)
   { circle shaded rgbstring(gold_) rad smrad-sthick at Here}
   { circle shaded rgbstring(gold_) rad smrad/2-sthick at Here}
   line from rvec_(smrad/2,0) to rvec_(smrad,0)
   }

 tmp =  midroserad-stripwid
 circle shaded rgbstring(gold_) rad midroserad-sthick at C
 circle shaded rgbstring(gold_) rad tmp-sthick at C
 CQ: circle invis rad tmp-linethick*4/2 spt_ at C
 line from CQ.e to CQ.n to CQ.w to CQ.s to CQ.e to CQ.n
 CQ: 0.5<CQ.e,CQ.n>
 tmp = (distance(CQ,C) - linethick*3/2 spt_)*sqrt(2)
 box wid tmp ht tmp at C
 ] with .sw at 1,1

] # Rose

Halftone: [
#.PS
# SpiralHalftoneDPV.m4
# https://tex.stackexchange.com/questions/584455/how-to-draw-this-spiral-made-of-circles-in-latex
# gen_init

 r = 133/255; g = 196/255; b = 100/255
 skale = 2/3*scale
 skale = 2.49/4.25

 holerad = 1*skale
 outerrad = 4.25*skale
 { circle thick 0.8 rad outerrad+2bp__ at Here outlined rgbstring(r,g,b) }

 define grcirc {circle diam $1 colored rgbstring(r,g,b)}

 npts = 200
 outercdiam = (outerrad/npts)*twopi_
 angoffset = -5*pi_/4
 da = twopi_/npts*10/3
 radc = outerrad
 for x = 0 to 1 do {
   cdiam = outercdiam*radc/outerrad
   for i=0 to npts-1 do { ang = i/npts*twopi_
     grcirc(cdiam*abs(ang-pi_)/pi_) at rect_(radc,ang+angoffset) }
   angoffset += da
   radc -= cdiam*2/3
   if radc < holerad then { x = 1 } else { x = 0 }
   }

#.PE
 ] with .sw at Rose.se+(0.2,0)

')
PE