/*syracuse*/ import geometry_dev; import animate; settings.tex="pdflatex"; settings.outformat="pdf"; animation anim; size(12cm); ellipse ellipse(point F1, real a, real c, point tgt, vector dir) { line d=line(tgt,tgt+dir); line bis=perpendicular(tgt,d); line l=line(tgt,reflect(bis)*F1); point[] F=intersectionpoints(circle(F1,2*c),l); real a0=abs(F1-tgt)+abs(F[0]-tgt); real a1=F.length > 1 ? abs(F1-tgt)+abs(F[1]-tgt) : 0; return abs(a0/2-a) < 1e-5 ? ellipse(F1,F[0],a0/2) : ellipse(F1,F[1],a1/2); } point F1=(0,0), F2=(10,0); dot("F",F2); ellipse el1=ellipse(F1,F2,6), el2; draw(el1, linewidth(bp)); point Fp2=shift(2*el1.a,0)*F2; line tgt, saxe; pen[] p=new pen[]{0.8*green,0.8*blue,0.8*yellow,cyan}; path[] locus=sequence(new path(int i){return nullpath;},p.length); real t=1/(p.length-1); bool initlocus=true; for (int i=0; i < 360; i += 1) { save(); point Fm=rotate(i,F2)*Fp2; dot("F'",Fm); draw(Fm--F2, linewidth(2bp)); point M=intersectionpoints(el1, line(F2,false,Fm))[0]; tgt=tangents(el1,M)[0]; draw(tgt, 0.8*red); el2=ellipse(Fm, el1.a, el1.c, M, tgt.u); draw(el2.F1--el2.F2); for (int j=0; j < p.length; ++j) { point P=point(segment(el2.F2,Fm),0.5+j*t/2); locus[j]=initlocus ? P : locus[j]--P; dot(P, p[j]); draw(locus[j], bp+p[j]); } dot(el2.F2); draw(el2, linewidth(bp)); anim.add(); restore(); initlocus=false; } erase(); anim.movie();