sinebar = {
const {sin, cos, csc, cot, sec, asin, acos, PI} = Math;
const k = 0.06 * 180 / PI;
const r = 3/4;
const envelope_curve = (t) =>
[+(r + k*t)*sin(t) + k*cos(t),
-(r + k*t)*cos(t) + k*sin(t)];
const circle = (cx) =>
(t) => [cx + r*sin(t), -r*cos(t)];
const
left = -1/2,
waist = -3/8,
bottom = -5/8,
lipy = 1/4,
lipx = 4 + 1/2,
a = bisect((t) => envelope_curve(t)[1] - lipy, 0, 2),
sa = sin(a), ca = cos(a),
g = r * ca / sa + waist / sa,
h = (waist - bottom) / ca,
b = asin(left/r),
c = -acos(-bottom/r);
return [
moveto(left, 0),
lineto(left, -r*cos(b)),
parametric_path(circle(0), [b, 0]),
parametric_path(circle(0), [0, a]),
lineto(r*sa + g*ca, -r*ca + g*sa),
lineto(r*sa + g*ca + h*sa, bottom),
lineto(k+r*sin(c), bottom),
parametric_path(circle(k), [c, 0]),
parametric_path(envelope_curve, [0, a]),
lineto(lipx, lipy),
lineto(lipx, 0),
lineto(left, 0),
`Z`,
].join("\n").replace(/\n/g, "");
}