import graph;
import geometry;
unitsize(1cm);
xlimits(-1, 13);
ylimits(-1, 6);
xaxis(BottomTop, Ticks(extend=true, pTick=lightgrey, ptick=invisible));
yaxis(LeftRight, Ticks(extend=true, pTick=lightgrey, ptick=invisible));
xequals(Label("$y$",align=2NW),0,ymin=-0.5, ymax=5.5, p=linewidth(1.5pt), Arrow(2mm));
yequals(Label("$x$",align=2SE),0,xmin=-0.5, xmax=12.5, p=linewidth(1.5pt), Arrow(2mm));
dot((0,0));
pair[] body = {(1,2),(4,1),(4,4),(6,1),(6,4),(8,3),(6,5),(10,4)};
real r1 = 1.3, r2 = 0.7;
path C1 = circle(body[5],r1), C2 = circle(body[6],r2);
draw(Label("$A$"),body[0]-(0,0.5));
draw(Label("$B$"),body[7]+(0.5,0));
fill(body[1]--body[3]--body[4]--body[2]--cycle,gray);
fill(C1,gray);
fill(C2,gray);
for(int i=0;i
1 && P2.length>1) tmp.push( P1[1] -- P2[1] );
if (P4.length>1) tmp.push( P3[0] -- P4[1] );
if (P3.length>1) tmp.push( P3[1] -- P4[0] );
return tmp;
}
path[] tmp;
// z bodu A
tmp = tangents( body[0], 0, body[6], r2 );
draw(tmp[0]); dot(tmp[0]);
draw( body[0] -- body[1] );
draw( body[0] -- body[2] );
// z bodu B
tmp = tangents( body[7], 0, body[5], r1 );
draw(tmp[0]); dot(tmp[0]);
draw(tmp[1]); dot(tmp[1]);
tmp = tangents( body[7], 0, body[6], r2 );
draw(tmp[0]); dot(tmp[0]);
// z LH rohu obdlznika
tmp = tangents( body[2], 0, body[5], r1 );
draw(tmp[0]); dot(tmp[0]);
tmp = tangents( body[2], 0, body[6], r2 );
draw(tmp[0]); dot(tmp[0]);
draw(tmp[1]); dot(tmp[1]);
// z PH rohu obdlznika
tmp = tangents( body[4], 0, body[5], r1 );
draw(tmp[0]); dot(tmp[0]);
draw(tmp[1]); dot(tmp[1]);
tmp = tangents( body[4], 0, body[6], r2 );
draw(tmp[0]); dot(tmp[0]);
draw(tmp[1]); dot(tmp[1]);
// z PD rohu obdlznika
tmp = tangents( body[3], 0, body[5], r1 );
draw(tmp[0]); dot(tmp[0]);
draw(tmp[1]); dot(tmp[1]);
tmp = tangents( body[3], 0, body[6], r2 );
draw(tmp[1]); dot(tmp[1]);
// medzi kruznicami
tmp = tangents( body[5], r1, body[6], r2 );
draw(tmp[0]); dot(tmp[0]);
draw(tmp[2]); dot(tmp[2]);
draw(tmp[3]); dot(tmp[3]);