Modélisation d'une avalanche

Résolu/Fermé
mgkextension Messages postés 4 Date d'inscription mercredi 23 décembre 2015 Statut Membre Dernière intervention 24 décembre 2015 - 23 déc. 2015 à 23:27
 MGKextension - 26 déc. 2015 à 12:20
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 24/12/2015 à 12:17
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 mercredi 23 décembre 2015 Statut Membre Dernière intervention 24 décembre 2015
24 déc. 2015 à 13:51
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310 > mgkextension Messages postés 4 Date d'inscription mercredi 23 décembre 2015 Statut Membre Dernière intervention 24 décembre 2015
24 déc. 2015 à 14:00
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 mercredi 23 décembre 2015 Statut Membre Dernière intervention 24 décembre 2015
Modifié par mgkextension le 24/12/2015 à 14:23
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310 > mgkextension Messages postés 4 Date d'inscription mercredi 23 décembre 2015 Statut Membre Dernière intervention 24 décembre 2015
Modifié par michel_m le 24/12/2015 à 14:54
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 mercredi 23 décembre 2015 Statut Membre Dernière intervention 24 décembre 2015
24 déc. 2015 à 15:09
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 25/12/2015 à 19:17
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
25 déc. 2015 à 23:45
Merci beaucoup !
0
MGKextension
26 déc. 2015 à 00:37
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
26 déc. 2015 à 11:38
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
26 déc. 2015 à 12:20
Ok Merci beaucoup pour votre temps.
0