Percolation d'un liquide



Drops number:
Bien des détails, et une application de modèle de percolation à l'économie .

Avec son code complet:


Code:Select all
<div class="ct">
<canvas id="percolation" width="160" height="300" style="border:1px solid black">
</canvas>
<br>Drops number: <span id="Text"></span></div>

<script>
canvas = document.getElementById("percolation");
ctx = canvas.getContext("2d");
Width=document.getElementById("percolation").width;
Height=document.getElementById("percolation").height;
zoom=4; // pixels size display inside canvas
W=Width/zoom;H=Height/zoom;

var Prc= new Array; // Percolation matrix
for (i=0;i<W;i++) {
  Prc[i]= new Array;
  for (j=0;j<H;j++) {Prc[i][j]=0;}
}

var Bd=new Array; // Boundary matrix
// Initialisation
Bd[0]=[Math.round(W/2),0];
for (i=0;i<W;i++) {Prc[i][0]=1;Bd[i]=[i,0];}

// Affichage matrice Prc de "Percolation" dans le canvas
ctx.fillStyle = "black";
function DrawState () {
  for (col=0 ; col<W ; col++) {
    for (lig=0 ; lig<H ; lig++) {
      if (Prc[col][lig] == 1) {ctx.fillRect(zoom*col,zoom*lig,zoom,zoom);}
    }
  }
}

// Ajout d'une nouvelle "goutte"
function NewDrop() {
  L=Bd.length; // Boundary length
  AleaW=Math.floor(L*Math.random());
  AleaDW=0;//AleaDW=2*Math.floor(2*Math.random())-1;
  AleaDH=0;//AleaDH=Math.floor(2*Math.random());
  Alea=Math.floor(3*Math.random()-1);
  if (Alea<0) {AleaDW=-1;}
  else if (Alea>0) {AleaDW=1;}
  else {AleaDH=1;}
  celli=Bd[AleaW][0]+AleaDW;cellj=Bd[AleaW][1]+AleaDH;
  if (Prc[celli][cellj]==0) {
    Prc[celli][cellj]=1;
    Bd[L]=[celli,cellj];
  }
  document.getElementById("Text").innerHTML=L;
  DrawState();// On retrace le nouvel état
}

// On reitère l'ajout d'une nouvelle goutte toutes les millisecondes
sI=setInterval('NewDrop()' , 1);
// Arrêt au bout de 2min= 120 000ms
setTimeout(function(){clearInterval(sI);}, 120000);
</script>

Voir aussi: