Dear Troy,
The animations are impressive and thank you for sharing the code.
In the creation of many pdf for animation, it changes the recurselevel only.
I wonder if there is a way to make such kind of animation in ConTeXt using Wolfgang's animation module.
Then we can include the animation in PDF output directly.
Here is my trial.
I modified it as following and got an animation. But it is only good for a few step animation.
%%%%%%%%%
\startbuffer[base]
N:=64;%\N;
u:=136;
pair f;
c:=2/(1+sqrt(5));%\c;
if c<1: f:=(1+-+c,0); v:=u/2; else: f:=(0,1+-+(1/c)); v:=u/c/2; fi; % Focus f is defined
path p,q;
pair z;
picture base;
numeric L;
p:=fullcircle yscaled c; % This is the ellipse
L:=length p;
draw p scaled (2*v) withpen pencircle scaled (v/260) dashed evenly; % Draw the ellipse dashed (will be traced later)
base:= currentpicture;
q:=bbox currentpicture enlarged (v/64); % Enlarge the bounding box slightly
q:=(llcorner q+(-v/128,-v/128))--(lrcorner q+(v/128,-v/128))--(urcorner q+(v/128,v/128))--(urcorner q+(-v/128,v/128))--cycle;
fill fullcircle scaled (v/32) shifted (f*v) withcolor red; % Focus
fill fullcircle scaled (v/32) shifted (-f*v) withcolor red; % Focus
base:=currentpicture; % Save this picture to draw in every frame
setbounds currentpicture to q; % Set the bounding box as described before
\stopbuffer
\startbuffer[fig1]
% \startMPpage
n:=1;%\recurselevel%1;
draw base; % Draw the common picture saved above
draw subpath (0,(n-1)/(N-1)*L) of p scaled (2*v) withpen pencircle scaled (v/130) withcolor blue; % Trace the ellipse in blue
z:=point ((n-1)/(N-1)*L) of p scaled v; % The point on the ellipse where we are thusfar
fill fullcircle scaled (v/32) shifted (2*z) withcolor blue; % Draw the point
draw (-f*v)--(2*z)--(f*v) withpen pencircle scaled (v/260); % Draw the string used to trace the ellipse
setbounds currentpicture to q; % Set the bounding box so that it is the same for each frame
% \stopMPpage
\stopbuffer
\startbuffer[fig2]
% \startMPpage
n:=2;
draw base; % Draw the common picture saved above
draw subpath (0,(n-1)/(N-1)*L) of p scaled (2*v) withpen pencircle scaled (v/130) withcolor blue; % Trace the ellipse in blue
z:=point ((n-1)/(N-1)*L) of p scaled v; % The point on the ellipse where we are thusfar
fill fullcircle scaled (v/32) shifted (2*z) withcolor blue; % Draw the point
draw (-f*v)--(2*z)--(f*v) withpen pencircle scaled (v/260); % Draw the string used to trace the ellipse
setbounds currentpicture to q; % Set the bounding box so that it is the same for each frame
% \stopMPpage
\stopbuffer
\startbuffer[fig3]
% \startMPpage
n:=3;
draw base; % Draw the common picture saved above
draw subpath (0,(n-1)/(N-1)*L) of p scaled (2*v) withpen pencircle scaled (v/130) withcolor blue; % Trace the ellipse in blue
z:=point ((n-1)/(N-1)*L) of p scaled v; % The point on the ellipse where we are thusfar
fill fullcircle scaled (v/32) shifted (2*z) withcolor blue; % Draw the point
draw (-f*v)--(2*z)--(f*v) withpen pencircle scaled (v/260); % Draw the string used to trace the ellipse
setbounds currentpicture to q; % Set the bounding box so that it is the same for each frame
% \stopMPpage
\stopbuffer
\setupinteraction[state=start]
\usemodule[animation]
\starttext
\startanimation[menu=yes]
{\processMPbuffer[base, fig1]}
{\processMPbuffer[base, fig2]}
{\processMPbuffer[base, fig3]}
\stopanimation
\stoptext
%%%%%%%%%%%%%
I also tried to simplify the code as following, but it just draw 10 figures not an animation.
Is there a way to combine them as an animation?
Thank you.
Best regards,
Dalyoung
%%%%%%%%%%%%%%%%%%%%%%%%%
\startbuffer[base]
N:=64;%\N;
u:=136;
pair f;
c:=2/(1+sqrt(5));%\c;
if c<1: f:=(1+-+c,0); v:=u/2; else: f:=(0,1+-+(1/c)); v:=u/c/2; fi; % Focus f is defined
path p,q;
pair z;
picture base;
numeric L;
p:=fullcircle yscaled c; % This is the ellipse
L:=length p;
draw p scaled (2*v) withpen pencircle scaled (v/260) dashed evenly; % Draw the ellipse dashed (will be traced later)
base:= currentpicture;
q:=bbox currentpicture enlarged (v/64); % Enlarge the bounding box slightly
q:=(llcorner q+(-v/128,-v/128))--(lrcorner q+(v/128,-v/128))--(urcorner q+(v/128,v/128))--(urcorner q+(-v/128,v/128))--cycle;
fill fullcircle scaled (v/32) shifted (f*v) withcolor red; % Focus
fill fullcircle scaled (v/32) shifted (-f*v) withcolor red; % Focus
base:=currentpicture; % Save this picture to draw in every frame
setbounds currentpicture to q; % Set the bounding box as described before
\stopbuffer
\startbuffer[fig1]
% \startMPpage
n:=\recurselevel;
draw base; % Draw the common picture saved above
draw subpath (0,(n-1)/(N-1)*L) of p scaled (2*v) withpen pencircle scaled (v/130) withcolor blue; % Trace the ellipse in blue
z:=point ((n-1)/(N-1)*L) of p scaled v; % The point on the ellipse where we are thusfar
fill fullcircle scaled (v/32) shifted (2*z) withcolor blue; % Draw the point
draw (-f*v)--(2*z)--(f*v) withpen pencircle scaled (v/260); % Draw the string used to trace the ellipse
setbounds currentpicture to q; % Set the bounding box so that it is the same for each frame
% \stopMPpage
\stopbuffer
\setupinteraction[state=start]
\usemodule[animation]
\starttext
\startanimation[menu=yes]
\dorecurse{10}{
{\processMPbuffer[base, fig1]}}
%{\processMPbuffer[base, fig2]}
%{\processMPbuffer[base, fig3]}
\stopanimation
\stoptext
%%%%%%%