Feb.05

Un escargot dans une matrice !!!

Titre un peu surprenant je vous l’accorde 🙂

Dans le cadre de mon projet SimImmuno II, j’ai besoin de connaĂ®tre quelles sont les cellules qui avoisine une cellule donnĂ©e. Pour cela, chaque cellule est placĂ©e dans une matrice (tableau Ă  deux dimensions !).

Le but de l’algorithme est de parcourir cette matrice à partir d’un point donnĂ©e (la position de la cellule) en tournant autour comme un escargot.

Petit exemple illustré :

Pour ne penser qu’Ă  l’algorithme oublions les histoires de cellule. Prenons un tableau de 100×100 avec un point de rĂ©fĂ©rence aux coordonnĂ©es 50;50.

Nous voulons juste rĂ©cupĂ©rer les coordonnĂ©es des positions autour de notre point de rĂ©fĂ©rence qu’empruntera notre escargot (Il suffira après de tester si aux coordonnĂ©es visitĂ©es il y a ou pas la prĂ©sence d’une cellule).

Dans notre cas, les coordonnĂ©es Ă  visiter sont : 50;49, 51;49, 51;50, 51;51, 50;51, 49;51, 49;50, 49;49, etc…

Si l’on illustre ça par le schĂ©ma :

On peut observer que l’on avance de x cases suivant notre avancement par multiple de 2 : 2 fois 1case, 2fois 2cases, 2fois 3cases, 2fois 4 cases, etc… L’on appellera cela le nombre de pas qui s’incrĂ©mentera tous les 2 avancement. Puis l’on « tourne » : Haut->Droit->Bas->Gauche->Haut->etc…

Pour coder ca en c#, dĂ©finissions tout d’abord une Ă©numĂ©ration pour la direction :

Nous allons maintenant créer une fonction Tourner qui prend en argument la direction précédente et retourne la nouvelle direction de cette maniere : Haut->Droit->Bas->Gauche->Haut->etc.. Ce qui nous ammene à écrire :

Maintenant, il nous faut une fonction nous permettant de nous renvoyer les coordonnĂ©es de la prochaine position en fonction de la position prĂ©cĂ©dente, du nombre de pas et de la direction (a noter que les positions sont matĂ©rialisĂ©s par l’objet Point possĂ©dant les propriĂ©tĂ©s X et Y) :

Une fois tout cela crĂ©Ă©, il nous reste plus qu’a crĂ©er la fonction principale du programme composĂ©e de 3 boucles :

  • La 1er, boucle de 0 au nombre de pas (nommĂ© jump) et calcule les prochaines positions.
  • La 2eme, boucle de 0 a 2 et appelle la 1er boucle, incrĂ©mente jump puis appelle la fonction Tourner
  • Enfin la dernière, de 0 a X oĂą X le point d’arrĂŞt.

Le code donne :

Et voila le tour est joué ! Si l’on s’amuse a mettre le code :

Ă  l’endroit de InsĂ©rer le code voulu ! nous obtenons :

Facile non ? 🙂

Dev,Algo,.NET
Share this Story:
  • facebook
  • twitter
  • gplus

Comments(1)

  1. y_nk
    le 24 septembre 2009 Ă  02:41

    Merci, je viens de retrouver ce (vieux) post encore bien rĂ©fĂ©rencĂ©, et je l’ai portĂ© sur flash a des proportions dĂ©fiant les limites de flash. Je posterai bientot un article dessus 🙂

Leave a comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Comment