Bubulles everywhere ! Une belle idée, inspirée d'un très vieux troll f.m.b.l qui ressurgit du passé pour sauter dans l'avenir radieux de la troiD (dm sous FreeBSD).
La première version du programme avait un petit souci : je suis quasiment sûr qu'elle restait coincé dans un optimum local, et que je n'arrive pas à en sortir. Hélas, le modèle d'itération que j'avais choisi (en suivant la méthode de la rache, bien entendu) n'etait pas vraiment statefull et la détection de coinçage trop gruikante à mettre en place.
Pour la seconde itération, j'ai utilisé quelques ruses un peu trop empiriques, mais qui donnent de meilleurs résultats pour cette pseudo simulation.
106 static double delta_moyen(Bubulle *items, int nbre, int target) 107 { 108 int foo; 109 double cumul, dist; 110 111 #define X items[foo].p.x 112 #define Y items[foo].p.y 113 #define Z items[foo].p.z 114 115 cumul = 0.0; 116 for (foo=0; foo<nbre; foo++) { 117 dist = sqrt(X*X + Y*Y + Z*Z); 118 cumul += fabs(target-dist); 119 } 120 121 return cumul/(double)nbre; 122 }
La suite est en marche.