On simule une pluie aléatoire de points M dans un carré de côté 1 dans lequel on a tracé le quart du cercle unité. On compte le nombre de points tombant à l'interieur du quart de cercle. La fréquence de points intérieurs au cercle tendra vers π/4 (soit la surface du quart de cercle) lorsque le nombre de points tendra vers l'infini. On peut donc considérer que cette fréquence est une approximation de π.
canvas
Voici le code de la pages web (au format .html) :
<!DOCTYPE HTML>
<html lang="fr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
<title>Monte-Carlo</title>
</head>
<body>
<canvas id="canvas" width="500" height="500">Impossible d'ouvrir le canvas !</canvas>
</body>
</html>
Copiez ce code dans un page montecarlo.html
et testez-le.
Rajouter la partie en javascript à la page :
<!DOCTYPE HTML>
<html lang="fr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
<title>Monte-Carlo</title>
</head>
<body>
<canvas id="canvas" width="500" height="500">Impossible d'ouvrir le canvas !</canvas>
<script>
function draw() {
var canvas = document.getElementById('canvas');
canvas.width=500;
canvas.height=500;
var context = canvas.getContext('2d');
//couleur noire choisie pour la couleur de fond du canvas
context.fillStyle = "#222222";
//fillRect(x, y, largeur, hauteur);.
context.fillRect(0,0,500,500);
//couleur jaune pour l'arc de cercle
context.strokeStyle = "yellow";
context.beginPath();
context.arc( 0 , 500 , 500, 0, 3*Math.PI/2,true);//context.arc(x abscisse du centre, y ordonnée du centre, rayon, anle de départ, angle d'arrivée, sens :true pour sens trigo sinon false attention la valeur par défaut est false donc on gradue dans le sens contraire du sens trigp);
context.stroke();
context.closePath()
}//fin de la fonction draw()
//appel de la fonction draw()
draw();
</script>
</body>
</html>
var cote=500;
telle que la taille de l'image s'adapte à la valeur de cette variable
<script>
, avant le début de la fonction draw()
.var n=1000;
draw()
.
//tracage des points en vert dans le quart de cercle et rouge dehors
for (let i=1;i<n;i++){
var x=Math.floor(Math.random() * cote);
var y=Math.floor(Math.random() * cote);
if (Math.pow(x,2)+Math.pow(cote-y,2)>+Math.pow(cote,2))
{context.fillStyle = "red"; }
else
{context.fillStyle = "green";}
context.beginPath(); //On démarre un nouveau tracé.
context.arc( x , y , 1, 0 , Math.PI*2); //On trace les points
context.fill(); //On utilise la méthode fill(); si l'on veut une forme pleine
context.closePath();
Pour afficher les résultats, il faut créer une zone pour visualiser les résultats dans notre page web.
Dans la partie html, on va placer une div
avec un identifiant.
canvas
.
<div id="piapprox"></div>
Dans la partie javascript, on modifie le code qui permettra de compter les points.
<script>
, après var n=1000;
et avant le début de la fonction draw()
.var pi;
draw()
.
var compteur=0;
compteur
donne le nombre de points verts (à l'intérieur du cercle).
draw()
.
pi=4*compteur/n ;
document.querySelector('#piapprox').innerHTML="pi="+pi+" et π = "+Math.PI.toString();
Pour créer une interaction avec notre page web, nous allons rajouter une zone de saisie et un bouton.
Dans la partie html :
<div id="piapprox"></div>
.
<input id="nbpoints" type="number" min="100" max="10000" value="5000"><button onclick="draw()">dessin</button>
Dans la partie javascript :
draw()
.
var n=document.querySelector('#nbpoints').value;
Modifiez le code afin d'obtenir le résultat dans le cadre ci-dessus.