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