Percolation d'un liquide
Drops number:
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>