% return a 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;