Done with EMT and the following code.
>u=linspace(-1,1,100); ... > v=linspace(0,2*pi,500)'; ... > X=(3+u*cos(v/2))*cos(v); Y=(3+u*cos(v/2))*sin(v); Z=u*sin(v/2); >view(2,1,0°,20°); fullwindow(); ... >twosides(false); plot3d(X,Y,Z,grid=[40,5]): >function one (x0,y0,z0,a,b,f=1,z=0.8) ... $global X,Y,Z; $xa=(X-x0)*f; ya=(Y-y0)*f; za=(Z-z0)*f; $fullwindow; view(0,z,a,0); $plot3d(xa,ya,za,<frame,<scale,grid=[40,5]); $endfunction >one(3,0,0.1,0,0,1): >function two (t,f=1,z=0.9) ... $global X,Y,Z; $x0=3+cos(t+pi/2)*0.1; y0=0; z0=sin(t+pi/2)*0.1; ${x0,y0}={x0*cos(2*t)-y0*sin(2*t),x0*sin(2*t)+y0*cos(2*t)}; $one(x0,y0,z0,2*t,0,f,z); $endfunction >two(2): >function three () ... $t=linspace(0,2pi,30); $for s=t; $ two(s); wait(0); $end; $endfunction >three >load makeanimations Functions to make an animated GIF or an MPEG movie. >makegif("two",linspace(0,2pi,50),"anim",600);