{
const ct = canvas.ct;
const { sin, cos } = Math;
ct.clearRect(0, 0, WIDTH, HEIGHT);
const l = (d[0]* ρ - d[1]) / α;
const X = [
B[0] - l,
B[1] - l*(ρ+α),
];
ct.beginPath();
parabolaThrough(
ct,
B[0] - l_min, B[1] - l_min*(ρ_min+α),
B[0] - l_mid, B[1] - l_mid*α,
X[0], X[1],
);
ct.lineWidth = 2;
ct.strokeStyle = "#0c0";
ct.lineTo(X[0], 0);
ct.fillStyle = "rebeccapurple";
ct.fill();
const a_distance = Math.sqrt(1 + ρ*ρ);
const b_distance = Math.sqrt(1 + (ρ+α)*(ρ+α));
ct.beginPath();
ct.moveTo(A[0] - extent / a_distance, A[1] - extent * ρ / a_distance);
ct.lineTo(A[0] + extent / a_distance, A[1] + extent * ρ / a_distance);
ct.moveTo(B[0] - extent / a_distance, B[1] - extent * (ρ+α) / a_distance);
ct.lineTo(B[0] + extent / a_distance, B[1] + extent * (ρ+α) / a_distance);
ct.lineWidth = 1;
ct.strokeStyle = "#999";
ct.stroke();
ct.beginPath();
ct.arc(X[0], X[1], 2, 0, 7);
ct.fillStyle = "#900";
ct.fill();
ct.beginPath();
ct.moveTo(A[0], A[1]);
ct.lineTo(B[0], B[1]);
ct.lineWidth = 1;
ct.strokeStyle = "blue";
ct.stroke();
ct.beginPath();
ct.arc(A[0], A[1], 5, 0, 7);
ct.arc(B[0], B[1], 5, 0, 7);
ct.fillStyle = "#333";
ct.fill();
return this || html`(<i>the drawing function</i>)`;
}