Dear all,

I tried to make an animation which draws Cardioid curve.
I found a code which draws Cardioid using circles.
Since I’d like to draw it differently, I modified it a little.

1. Define the z[] values in the \startMPdefinitions block
2. Modified the drawing method in \startMPbuffer

When I run it, it doesn’t recognize the z[] values defined already.
I think that the z[] values are not delivered to \startbuffer.
I tried \startMPinclusions, \startMPinitialization, but I couldn’t succeed.

1. How can I deliver the z[] values into the buffer?
2. What is wrong in the following code?

Thank you for reading.

Best regards,

Dalyoung

\usemodule[animation]
\setupinteraction[state=start]

\startMPdefinitions%{Cardioid}
path p,q;
numeric u, ang,j,num;
picture pict;

u := 1cm;
ang := 360/52;

p := fullcircle scaled 5u;
for i=0 upto 51:
z[i] = 2.5*dir(ang*i)*u;
endfor;
pict := image (
draw p withpen pencircle scaled 1;
);
\stopMPdefinitions


\startbuffer[Cardioid][s]
draw pict;
num := \MPrawvar{Cardioid}{s};

for i = 0 upto num:
j := 2i mod 52;
draw z[i] -- z[j];
endfor;
setbounds currentpicture to boundingbox currentpicture enlarged 2mm ;
\stopbuffer

\startdocument

\startanimation[menu=yes, framerate=7]
\dorecurse{52}
{\startexpanded
\startframe
\setupMPvariables[Cardioid][s=\recurselevel]
\processMPbuffer[Cardioid]
\stopframe
\stopexpanded}
\stopanimation
\stopdocument