prologues := 1; defaultfont := "Helvetica"; beginfig(1); path screen; screen = (0,0)--(400,300); % frame draw ulcorner screen -- urcorner screen -- lrcorner screen -- llcorner screen -- cycle withpen pencircle scaled 5pt; % draw screen; pair ctr; ctr = 0.1[center(screen), 0.5[ulcorner screen, urcorner screen]]; % draw ctr -- ctr withpen unitcircle; xrad = 140; yrad = 110; path circle; circle = fullcircle scaled 2 xscaled xrad yscaled yrad shifted ctr; draw circle; pair sh; sh = (20,0); pair projpt; projpt = ctr - (xrad, 0); x = 10; z0 = (-x, -x); z1 = (x, -x); z2 = (-1, -1); vardef buoy(expr p) = save int,shift,b,bscale, projline; pair int, shift; shift = p + sh; pair b; path projline; projline = .1[projpt,p] -- (2.5*xrad/abs(projpt-p))[projpt, p]; draw projline; b = shift; bscale = 20; draw p-z0 -- p+z0; draw p-z1 -- p+z1; draw p -- b; draw bbox(b-z2*bscale -- b+z2*bscale); enddef; buoy((20,20)); buoy((100,120)); dotlabel.urt("C", ctr); dotlabel.urt("P", projpt); endfig; end