### 3.17.3 Animation of a sequence of graphic objects : `animation`

`animation` animates the representation of a
sequence of graphic objects
with a given display time. The sequence of objects depends most of
the time of a parameter and is defined using the `seq` command
but it is not mandatory.

`animation` takes as argument the sequence of graphic objects.

To define a sequence of graphic objects with `seq`,
enter the definition of the graphic object (depending on
the parameter), the parameter name, it’s minimum value, it’s
maximum value maximum and optionnaly a step value.

Input :

`animation(seq(plotfunc(cos(a*x),x),a,0,10))`

Output :

`The sequence of the curves defined by `*y*=`cos``(`*ax*)`, for `*a*=0,1,2..10

Input :

`animation(seq(plotfunc(cos(a*x),x),a,0,10,0.5))`

or

`animation(seq(plotfunc(cos(a*x),x),a=0..10,0.5))`

Output :

`The sequence of the curves defined by `*y*=`cos``(`*ax*)`, for `*a*=0,0.5,1,1.5..10` `

Input :

`animation(seq(plotfunc([cos(a*x),sin(a*x)],x=0..2*pi/a), a,1,10))`

Output :

`The sequence of two curves defined by `*y*=`cos``(`*ax*)` and `*y*=`sin``(`*ax*)`, for `*a*=1..10` and for `*x*=0..2π/*a*` `

Input :

`animation(seq(plotparam([cos(a*t),sin(a*t)], t=0..2*pi),a,1,10))`

Output :

`The sequence of the parametric curves defined by `*x*=`cos``(`*at*)` and `*y*=`sin``(`*at*)`, for `*a*=1..10` and for `*t*=0..2π` `

Input :

`animation(seq(plotparam([sin(t),sin(a*t)], t,0,2*pi,tstep=0.01),a,1,10))`

Output :

`The sequence of the parametric curves defined by `*x*=`sin``(`*t*),*y*=`sin``(`*at*)`, for `*a*=0..10` and `*t*=0..2π

Input :

`animation(seq(plotpolar(1-a*0.01*t``^`

`2, t,0,5*pi,tstep=0.01),a,1,10))`

Output :

`The sequence of the polar curves defined by ``ρ=1-`*a**0.01**t*^{2}`, for `*a*=0..10` and `*t*=0..5π

Input :

`plotfield(sin(x*y),[x,y]); animation(seq(plotode(sin(x*y),[x,y],[0,a]),a,-4,4,0.5))`

Output :

`The tangent field of y’=sin(xy) and the sequence of the integral curves crossing through the point ``(0,`*a*)` for `*a*`=-4,-3.5...3.5,4`

Input :

`animation(seq(display(square(0,1+i*a),filled),a,-5,5))`

Output :

`The sequence of the squares defined by the points 0 and 1+i*`*a*` for `*a*=-5..5

Input :

`animation(seq(droite([0,0,0],[1,1,a]),a,-5,5))`

Output :

`The sequence of the lines defined by the points [0,0,0] and [1,1,`*a*`] for `*a*=-5..5

Input :

`animation(seq(plotfunc(x``^`

`2-y``^`

`a,[x,y]),a=1..3))`

Output :

`The sequence of the "3D" surface defined by `*x*^{2}`-`*y*^{a}`, for `*a*=1..3` with rainbow colors`

Input :

`animation(seq(plotfunc((x+i*y)``^`

`a,[x,y], display=filled),a=1..10)`

Output :

`The sequence of the "4D" surfaces defined by ``(`*x*+*i***y*)^{a}`, for `*a*=0..10` with rainbow colors`

**Remark**
We may also define the sequence with a program,
for example if we want to draw the
segments of length 1,√2...√20 constructed with a
right triangle of side 1 and the previous segment
(note that there is a `c:=evalf(..)` statement
to force approx. evaluation otherwise the computing time
would be too long) :

seg(n):={
local a,b,c,j,aa,bb,L;
a:=1;
b:=1;
L:=[point(1)];
for(j:=1;j<=n;j++){
L:=append(L,point(a+i*b));
c:=evalf(sqrt(a^2+b^2));
aa:=a;
bb:=b;
a:=aa-bb/c;
b:=bb+aa/c;
}
L;
}

Then input :

`animation(seg(20))`

We see, each point, one to one with a display time that
depends of the `animate` value in `cfg`.

Or :

`L:=seg(20); s:=segment(0,L[k])$(k=0..20)`

We see 21 segments.

Then, input :

`animation(s)`

We see, each segment, one to one with a display time that
depends of the `animate` value in `cfg`.