Modélisation d'une avalanche

Résolu
mgkextension Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
 MGKextension -
Bonjour, dans le cadre de mes etudes, je dois réaliser un programme qui simule une avalanche type grain de sable ou flocon de neige. Je suis débutant en VBA.
J'ai pensé à travailler sur une grille carré en vue du dessus en plaçant dans chaque cellule de façon aléatoire un nombre de grain précis tombant de façon aléatoire grain par grain en fonction du nombre obtenu aléatoirement. Voici ce que j'ai fais pour simuler aléatoirement un nombre:

Sub nombreAleatoireDansPlageValeurs()
Dim Mini As Integer, Maxi As Integer

Mini = 1
Maxi = 5

Randomize
MsgBox Int((Maxi - Mini + 1) * Rnd + Mini)
End Sub

Ensuite, au fur et à mesure que la grille se remplie, je veux effectuer des conditions sur chaque cellule, si la cellule contient plus de 4 grains, elle s'écroule en en laissant un seul dans cette cellule, le reste s'éparpille autour de la cellule, et ainsi de suite jusqu'a ce qu'il y est un seul grain qui tombe en dehors de la grille, dans ce cas le programme s'arrête.
Je pense qu'il faut faire une boucle dans un boucle et introduire les if puis faire un programme principal qui appelle le programme plus haut puis fait les conditions et réitère le procédé.
Merci d'avance.
A voir également:

3 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour
le reste s'éparpille autour de la cellule

c a d ?
aléatoire , contigûe et/ou proche ?

taille de la grille (environ) ?

Ordre de remplissage ?

Dans une cellule ayant récupéré un grain suite à l'opération précédente, peut-on refaire un tirage ?

sens de la pente :diagonal, vertical ?


 Michel
1
mgkextension Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
1ère étape: on ajoute des grains de sable dans un carré composé d'une centaine de cellules un par un et aléatoirement.

2eme étape: si la valeur de la case est supérieur strictement à 4 alors il y a redistribution des particules de sable sur les sites voisins les plus proches de manière àléatoire.
Attention on peut avoir des réactions en chaîne.
Pour les particules se trouvant sur un des bords (hors coin), le modèle considère que si la pile dépasse la valeur critique, il y a redistribution de 3 grains et perte de 1 grain.
Dans le cas des quatre sites du coin du réseau, 2 grains sont perdus et 2 sont redistribués.

On remplit grain par grain aléatoirement dans la grille, les grains s'additionnent au fur et à mesure dans les cellules. A chaque fois on garde la grille précédente auquel on ajoute un nouveau grain de manière aléatoire.

Le sens de la pente: c'est comme un puissance 4 vue du dessus, la pente est donc vertical. 4 grains dans la même cellule et la pile s'écroule.

Merci de votre temps
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314 > mgkextension Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
case est supérieur strictement à 4

ou

4 grains dans la même cellule et la pile s'écroule.
?

marrant!, ca nous changera des calculs de TVA
0
mgkextension Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
A chaque grain qui tombe on augmente la valeur d'une cellule, si elle dépasse strictement 4 alors les grains sont redistribués autour de la cellule selon les règles plus hauts.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314 > mgkextension Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
OK, sois patient, c'est Noël et...

remarque que j'ai l'impression que ca va attirer pas mal de mes petits camarades de CCM !
0
mgkextension Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Aucun souci ! Je cherche de mon côté également.
Passez de bonnes fêtes de Noël et merci
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour,

en utilisant la récursivité (réactions en chaîne) avec éboulement vers le bas de la pente (aléatoire sud,sud ouest, sud est)
la ligne du bas est forcément supérieure à 4 flocons : impossible de descendre + bas comme toute avalanche
http://www.cjoint.com/c/ELzsof2JkB5
1
MGKextension
 
Merci beaucoup !
0
MGKextension
 
Je voudrais maintenant faire pareil mais vu du dessus. Le programme donne une avalanche vue de face dirons nous. Serait il possible de faire pareil vue du dessus avec les mêmes conditions, en rajoutant la condition sur les bords de la grille: le programme s'arrête si il y a plus de 4 grains de sable strictement sur les bords. ?
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
bonjour

petite erreur ( pas enregistré la dernière fois
dans la procédure "repandre" ajouter End if à la fin

              Case 3 'sud-est
If Lieu.Offset(1, 1) = "" Then Nbre = Nbre + 1
Lieu.Offset(1, 1) = Lieu.Offset(1, 1) & "T"
If Len(Lieu.Offset(1, 1)) = 5 Then: Call Repandre(Lieu.Offset(1, 1), Lig + 1, Col + 1)
End Select
Loop Until Len(Lieu) = 1
End If
Nbsens = 0
End Sub


Quant à ta 2° demande, c'est non:
j'ai passé pas mal d'heures sur ta 1° demande car VBA n'aime pas beaucoup les récursivités de procédures: bien que sur les forums d'entraide, on ne fait pas "à la place", mais on aide sur des points précis (genre mon erreur indiquée + haut), Ce problème m'avait branché.

Donc, tu as le principe "de l'avalanche", à toi de jouer pour la sortie du cadre d'un flocon. tout se passe dans la proc"dure "répandre" dans la partie "possibités"
0
MGKextension
 
Ok Merci beaucoup pour votre temps.
0