# Chapitre 16 Exercice : Les courses poursuites

## 16.1 Le chien qui va en direction de son maitre

On chien se trouve en C de coordonnées (0,1) et son maitre se trouve en M de coordonnées (0,0).
Le maitre se déplace sur l’axe des x et le chien se dirige à la même vitesse en direction de son maitre.
On veut dessiner la trajectoire du chien.

    chien():={
    local X,Y,L,xk,yk,p,j,k,d,a,a1,b,b1;
    DispG;
    ClrGraph();
    p:=0.1;
    X:=0,0,3;
    Y:=1,0,0;
    L:=NULL;
    pour k de 0 jusque 1 faire
    L:=L,point(X[k]+i*Y[k],affichage=1+epaisseur_point_2+point_point);
    fpour;
    tantque abs(X[0]+i*Y[0]-X[1]-i*Y[1])>0.1 faire
    pour k de 0 jusque 1 faire
    a:=X[k];a1:=X[k+1]-a;
    b:=Y[k];b1:=Y[k+1]-b;
    d:=sqrt(a1^2+b1^2);
    xk:=a+p*a1/d;
    yk:=b+p*b1/d;
    L:=L,segment(a+i*b,xk+i*yk,affichage=k);
    X[k]:=xk;
    Y[k]:=yk;
    fpour;
    ftantque;
    return L;
    }
    :;

## 16.2 Avec les sommets d’isopolygônes

Des personnes A,B,C.. sont situées aux sommets A,B,C.. d’un isoploygone.
Á l’instant t, A se dirige vers B, B se dirige vers C, C se dirige vers D,...et le dernier sommet se dirige vers A.
On veut dessiner les trajectoires de A,B,C....

    isopoly(n,m):={
    local X,Y,L,xk,yk,p,j,k,d,a,a1,b,b1,P,SP;
    p:=0.1;
    L:=NULL;
    P:=isopolygone(0,1,n);
    SP:=op(sommets(P));
    X:=evalf(abscisse(SP));
    Y:=evalf(ordonnee(SP));
    pour k de 0 jusque n-1 faire
    L:=L,point(X[k]+i*Y[k],affichage=1+epaisseur_point_2+point_point);
    fpour;
    pour j de 0 jusque m-1 faire
    X[n]:=X[0];
    Y[n]:=Y[0];
    pour k de 0 jusque n-1 faire
    a:=X[k];a1:=X[k+1]-a;
    b:=Y[k];b1:=Y[k+1]-b;
    d:=sqrt(a1^2+b1^2);
    xk:=a+p*a1/d;
    yk:=b+p*b1/d;
    L:=L,segment(a+i*b,xk+i*yk,affichage=k+89);
    X[k]:=xk;
    Y[k]:=yk;
    fpour;
    fpour;
    return L;
    }
    :;

## 16.3 Avec les sommets de polygônes quelconques

Des personnes A,B,C... sont situées aux sommets d’un ploygone A,B,C... dont les affixes sont les éléments de la liste Z.
Á l’instant t, A se dirige vers B, B se dirige vers C, C se dirige vers D,...et le dernier sommet se dirige vers A.
On veut dessiner les trajectoires de A,B,C....

    poly(Z):={
    local X,Y,L,xk,yk,p,j,k,d,a,a1,b,b1,n,m;
    p:=0.1;
    L:=NULL;
    m:=100;
    n:=size(Z);
    X:=re(Z);
    Y:=im(Z);
    pour k de 0 jusque n-1 faire
    L:=L,point(X[k]+i*Y[k],affichage=1+epaisseur_point_2+point_point);
    fpour;
    pour j de 0 jusque m-1 faire
    X[n]:=X[0];
    Y[n]:=Y[0];
    pour k de 0 jusque n-1 faire
    a:=X[k];a1:=X[k+1]-a;
    b:=Y[k];b1:=Y[k+1]-b;
    d:=sqrt(a1^2+b1^2);
    xk:=a+p*a1/d;
    yk:=b+p*b1/d;
    L:=L,segment(a+i*b,xk+i*yk,affichage=k+89);
    X[k]:=xk;
    Y[k]:=yk;
    fpour;
    fpour;
    return L;
    }
    :;

## 16.4 Avec des points aléatoires

Des souris A,B,C... sont situées aux points A,B,C... dont les coordonnées sont les éléments des listes X et Y définies aléatoirement entre -1 et 1.
Á l’instant t, A se dirige vers B, B se dirige vers C, C se dirige vers D,...et le dernier sommet se dirige vers A.
On veut dessiner les trajectoires de A,B,C....

    courbot0():={
    local X,Y,L,xk,yk,p,m,n,j,k,d,a,a1,b,b1;
    DispG;
    ClrGraph();
    p:=0.1;
    m:=10;
    n:=50;
    X:=NULL;
    Y:=NULL;
    L:=NULL;
    pour k de 0 jusque n-1 faire
    xk:=2*alea(0,1)-1;
    yk:=2*alea(0,1)-1;
    X:=X,xk;
    Y:=Y,yk;
    L:=L,point(xk,yk,affichage=1+epaisseur_point_2+point_point);
    fpour;
    Pause 1;
    pour j de 0 jusque m-1 faire
    X[n]:=X[0];
    Y[n]:=Y[0];
    pour k de 0 jusque n-1 faire
    a:=X[k];a1:=X[k+1]-a;
    b:=Y[k];b1:=Y[k+1]-b;
    d:=sqrt(a1^2+b1^2);
    xk:=a+p*a1/d;
    yk:=b+p*b1/d;
    L:=L,segment(a+i*b,xk+i*yk,affichage=k+90);
    X[k]:=xk;
    Y[k]:=yk;
    fpour;
    Pause 1;
    fpour;
    return L;
    }
    :;
    courbot():={
    local xt,yt,X,Y,L,xk,yk,p,m,n,j,k,d,a,a1,b,b1;
    ClrGraph();
    p:=0.01;
    m:=100;
    n:=50;
    X:=NULL;
    Y:=NULL;
    L:=NULL;
    pour k de 0 jusque n-1 faire
    xk:=2*alea(0,1)-1;
    yk:=2*alea(0,1)-1;
    X:=X,xk;
    Y:=Y,yk;
    L:=L,point(xk,yk,affichage=1+epaisseur_point_2+point_point);
    fpour;
    pour j de 0 jusque m-1 faire
    X[n]:=X[0];
    Y[n]:=Y[0];
    pour k de 0 jusque n-1 faire
    a:=X[k];a1:=X[k+1]-a;
    b:=Y[k];b1:=Y[k+1]-b;
    d:=sqrt(a1^2+b1^2);
    xt:=a+p*a1/d ;
    yt:=b+p*b1/d;
    L:=L,segment(a+i*b,xt+i*yt,affichage=k+90);
    X[k]:=xt;
    Y[k]:=yt;
    fpour;
    fpour;
    return L;
    }:;