### 3.23.3 Animation d’une séquence d’objets graphiques :`animation`

`animation` permet de dessiner chaque objet d’une suite d’objets graphiques avec un temps d’affichage donné. En général les objets de la suite dépendent d’un paramètre, il faut alors créer une suite en faisant varier ce paramètre.
`animation` a comme paramètre une séquence d’objets graphiques.
Remarque
Si on veut que dans l’animation plusieurs objets graphiques soient affichès en même temps, il faut mettre ces objets dans une liste, par exemple :
On tape :

`plotfunc(x```^```2);animation([point(1),segment(1,1+i), point(1+i)],droite(y=2*x-1))`

On obtient :

`le graphe de` `y=x``2``puis une animation de 2 objets (le premier objet est 2 points et un segment et le deuxième une droite)`

Attention
Pour définir la séquence d’objets graphiques avec `seq` on peut quoter ou ne pas quoter la commande dessinant l’objet graphique.
On peut aussi spécifier le pas de la séquence si on utilise 5 arguments pour `seq` : l’objet graphique, le nom du paramètre, sa valeur minimum, sa valeur maximum et le pas.
On tape :

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

On obtient :

`La suite des différentes représentations de la courbe définies par` `y=``cos``(ax)``, pour` `a=0,1,2..10`

On tape :

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

On obtient :

`La suite des différentes représentations de la courbe définies par` `y=``cos``(ax)``, pour` `a=0,0.5,1,1.5..10```

On tape :

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

On obtient :

`La suite des différentes représentations des 2 courbes définies par` `y=``cos``(ax)``et` `y=``sin``(ax)``, pour` `a=1..10` `et pour` `x=0..2π/a```

On tape :

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

On obtient :

`La suite des différentes représentations des courbes définies paramétriquement par` `x=``cos``(at)``et` `y=``sin``(at)``, pour` `a=1..10` `et pour` `t=0..2π```

On tape :

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

On obtient :

`La suite des différentes représentations des courbes paramétrées définies par` `x=``sin``(t),y=``sin``(at)``, pour` `a=0..10` `et` `t=0..2π`

On tape :

`animation(seq(plotpolar(1-a*0.01*t```^```2, t,0,5*pi,tstep=0.01),a,1,10))`

On obtient :

`La suite des différentes représentations des courbes polaires définies par` `ρ=1-a*0.01*t``2``, pour` `a=0..10` `et` `t=0..5π`

On tape :

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

On obtient :

`Le champ des tangentes de y’=sin(xy) et la suite des différentes courbes intégrales passant par le point` `(0;a)``pour` `a``=-4,-3.5...3.5,4`

On tape :

`animation(seq(affichage(carre(0,1+i*a),rempli),a,-5,5))`

On obtient :

`La suite des différents carrés définis par les points 0 et 1+i*``a` `pour` `a=-5..5`

On tape :

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

On obtient :

`La suite des différentes droites définies par les points [0,0,0] et [1,1,``a``] pour` `a=-5..5`

On tape :

`animation(seq(plotfunc(x```^```2-y```^```a,[x,y]), a=1..3))`

On obtient :

`La suite des différentes représentations 3-d des surfaces définies par` `x``2``-y``a``, pour` `a=1..3` `avec les couleurs de l’arc en ciel`

On tape :

`animation(seq(plotfunc((x+i*y)```^```a,[x,y], affichage=rempli),a=1..10))`

On obtient :

`La suite des différentes représentations "4D" des surfaces définies par` `(x+i*y)``a``, pour` `a=0..10` `avec les couleurs de l’arc en ciel`

Remarque 0n peut construire la séquence avec un programme, par exemple on veut dessiner les segments de longueur 1,√2...√20 construit avec un triangle rectangle de côtés 1 et le segment précédent.
Voici ce programme (bien mettre `c:=evalf(..)` pour que les calculs soient approchés sinon le temps de calcul est trop long) :

    essai(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;
    }

Puis on tape :

`animation(essai(20))`

On voit, en boucle, chaque point, l’un après l’autre, avec un temps d’affichage plus ou moins grand selon la valeur de `animate` de `cfg`.
Ou on tape :

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

On voit les 21 segments.
Puis on tape :

`animation(s)`

On voit, en boucle, chaque segment, l’un apres l’autre avec un temps d’affichage plus ou moins grand selon la valeur de `animate` de `cfg`.