% return a <pair> with the two times on C that
% correspond to the external tangents from p to C
vardef tangent_times(expr C, p) =
save m, o, G, H, a, b;
pair m, o; path G, H; numeric a, b;
o = center C; m = 1/2[o, p];
H = halfcircle zscaled (p-o) shifted m;
G = halfcircle zscaled (o-p) shifted m;
(a, whatever) = C intersectiontimes H;
(b, whatever) = C intersectiontimes G;
(a, b if b < a: + 8 fi)
enddef;