In case anyone cares, here is the "finished" product which is a frame-by-frame animation of a hypocycloid.  The following code will produce a 190 page PDF where each page is an individual frame of the animation.

Troy

\edef\r{\luaexpr{1/3.8}} % Radius of smaller circle (larger circle has radius 1)
\edef\N{10} % Number of frames in animation per hypocycloid "branch"

\edef\K{1}\doloop{\ctxlua{commands.doifelse(math.abs(\K*\r - math.floor(\K*\r+0.5))<0.000001)}{\exitloop}{\edef\K{\luaexpr{\K+1}}}}
\startMPinclusions[+]
    r:=\r; % Radius of smaller circle (larger circle has radius 1)
    u:=70; % Scaling factor for the graphics
    K:=\K; % Number of "branches" per period (computed automatically)
    M:=8; % Number of points in the Bezier curve for each "branch"
    N:=\N; % Number of frames in animation per hypocycloid "bran
    path p; % p is the "first branch" of the hypocycloid
    p:=(1,0) for m=1 upto (M-1): .. (r*cosd(360*(r-1)/(M-1)*m)-(r-1)*cosd(360*r/(M-1)*m),r*sind(360*(r-1)/(M-1)*m)-(r-1)*sind(360*r/(M-1)*m)) endfor;
    W:=ceiling(u/32*65); % Width of each figure's bounding box
    H:=W; % Height of each figure's bounding box
    path q;
\stopMPinclusions
\starttext
    \dorecurse{\luaexpr{\K*\N}}{
        \startMPpage
            m:=floor((\recurselevel-1)/N);
            n:=\recurselevel-m*N-1;
            numeric s[];
            t:=n/N;
            q:=(((1-r)*cosd(360*r*t),(1-r)*sind(360*r*t))--((1+r)*cosd(360*(r-1)*t)-(r-1)*cosd(360*r*t),(1+r)*sind(360*(r-1)*t)-(r-1)*sind(360*r*t)));
            (s1,s2) = p intersectiontimes reverse q;
            for j=0 upto (m-1): draw p scaled u rotated (360*r*j) withcolor red; endfor;
            draw subpath (0,s1) of p scaled u rotated (360*r*m) withcolor red;
            draw fullcircle scaled (2*u);
            draw fullcircle scaled (2*r*u) shifted ((1-r)*u*cosd(360*r*t),(1-r)*u*sind(360*r*t)) rotated (360*r*m);
            draw subpath (s2,length q) of (reverse q) scaled u rotated (360*r*m);
            setbounds currentpicture to (-W/2,-H/2)--(W/2,-H/2)--(W/2,H/2)--(-W/2,H/2)--cycle;
        \stopMPpage
    }
\stoptext