vardef equilateral_triangle_point(expr a, b) =
b shifted -a rotated 60 shifted a
enddef;
vardef euclidean_bisector(expr a,b,c,r) =
save arc,p,q,e;
path arc; numeric p,q; pair e;
arc = fullcircle scaled r shifted b;
p = ypart ( (a--b) intersectiontimes arc );
q = ypart ( (b--c) intersectiontimes arc );
e = equilateral_triangle_point(point p of arc, point q of arc);
hide(
draw subpath(p-1/4,p+1/4) of arc withcolor .7[red,white];
draw subpath(q-1/4,q+1/4) of arc withcolor .7[red,white];
draw point p of arc -- point q of arc -- e -- cycle
withcolor .7[blue,white];
)
e
enddef;
vardef vector_bisector(expr a,b,c,r) =
b + unitvector (a-b) scaled r
+ unitvector (c-b) scaled r
enddef;