Exemple d'algorithme de choix.
Supposons (C2, C3) immobiles, et (C1) animé d'un mouvement uniforme horizontal dont les positions successives sont données (en l'absence de toute contrainte) par la relation: OC1j+1 = OC1j + U .
Chaque déplacement est alors représenté par le vecteur horizontal U = h.ux = (h, 0)
de longueur U = h .
On peut, à partir de la position actuelle C1k, envisager 3 déplacements de même longueur:
# un déplacement horizontal de même sens U = C1kI = h.ux = (h, 0) ;
# un déplacement vertical ascendant V = C1kJ = h.uy = (0, h) , normal au précédent;
# un déplacement vertical descendant W = C1kK = -h.uy = (0, -h) , opposé à (V) ,
comme il est indiqué ci-dessous:
Le choix découlera de la comparaison des distances observées entre les 3 nouveaux points et les centres (C2) et C3); l'incompressibilité des boules impose en effet une valeur minimale aux carrés des distances séparant leurs centres.
Soit donc M12 = Min(C1C22) = (R1 + R2)2 , et M13 = Min(C1C32) = (R1 + R3)2 , en supposant chacune des boules caractérisée par un rayon donné (R1, R2 ou R3).
Le choix du déplacement (T) - ou son absence - sera effectué par un algorithme du type suivant (*):
1 2 3 4 5 6 7 8 9 10
|
TestI:= ((IC2<sup>2</sup>>M12) AND (IC3<sup>2</sup>>M13));
TestJ:= ((JC2<sup>2</sup>>M12) AND (JC3<sup>2</sup>>M13));
TestK:= ((KC2<sup>2</sup>>M12) AND (KC3<sup>2</sup>>M13));
IF TestI THEN T:= U
ELSE IF TestJ THEN T:= V
ELSE IF TestK THEN T:= W
ELSE T:= Vzero; // Vecteur nul: Vzero = (0, 0)
OC1[k+1]:= OC1[k] + T; |
(*)Désolé pour cette notation abominable 
Le point mobile (C1) contournera ainsi les obstacles en se déplaçant globalement vers la droite., à moins d'un blocage auquel il faudra trouver une échappatoire.
Le code s'adapte sans difficulté à un mouvement migratoire d'orientation quelconque, de déplacement élémentaire
U = a.ux + b.uy = (a, b) ;
il suffit d'associer à ce vecteur deux autres qui lui sont perpendiculaires:
V = (-b, a) et W = (b, -a) = -V .
Leur norme commune (h) est liée à leurs composantes par la relation de Pythagore:
h2 = a2 + b2 .
Partager