svg`<svg width="${w}" height="${h}">
<defs>
${polygons.map((p, i) => {
const index = randInt(p.pts.length)
let a = p.pts[index]
let b = p.pts[(index + p.pts.length / 2 | 0) % p.pts.length]
const colorA = getColor(a)
const colorB = getColor(b)
a = PVector.sub(a, p.center).setMag(0.7).add(0.5)
b = PVector.sub(b, p.center).setMag(0.7).add(0.5)
return `<linearGradient id="gradient${i}" x1="${a.x}" y1="${a.y}" x2="${b.x}" y2="${b.y}">
<stop offset="0%" stop-color="${colorA}"/>
<stop offset="100%" stop-color="${colorB}"/>
</linearGradient>`
}).join('\n')}
</defs>
<rect x="0" y="0" width="${w}" height="${h}" stroke="none" fill="white"></rect>
<g transform="translate(${w/2}, ${h/2}) scale(1) translate(${-w/2}, ${-h/2})">
${polygons.map((p, i) => `<polygon
transform="translate(${p.center.x}, ${p.center.y}) scale(1.05) translate(${-p.center.x}, ${-p.center.y})"
fill="url(#gradient${i})"
stroke="none"
points="${p.pts.map(pt => `${pt.x} ${pt.y}`).join(' ')}"
/>`).join('\n')}
</g>
</svg>`