Metodo Montecarlo per la stima di π


$P(cerchio)=$$\frac{Area(favorevole)}{Area(possibile)}$$=$$\frac{Area(cerchio)}{Area(quadrato)}$$=\frac{πr²}{4r²}=$$\frac{π}{4}$$ $

Quindi, esplicitando π:

$π=4P(cerchio)=4 $$\frac{punti(cerchio)}{punti(totali)}$$ $

<!DOCTYPE html> <html lang="it"> <head> <script> MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] }, svg: { fontCache: 'global' } }; </script> <script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"> </script> <meta charset="UTF-8"> <title>Stima_di_Pi_Greco</title> <style> canvas { border: 1px solid black; } </style> </head> <body> <h2>Metodo Montecarlo per la stima di π</h2> <canvas id="canvas" width="400" height="400"></canvas> <br> $P(cerchio)=$$\frac{Area(favorevole)}{Area(possibile)}$$=$$\frac{Area(cerchio)}{Area(quadrato)}$$=\frac{πr²}{4r²}=$$\frac{π}{4}$$ $ <br><br>Quindi, esplicitando π: <br><br>$π=4P(cerchio)=4 $$\frac{punti(cerchio)}{punti(totali)}$$ $ <br><br> <div id="info"></div> <script> const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); const radius = canvas.width / 2; const centerX = canvas.width / 2; const centerY = canvas.height / 2; let insideCircle = 0; let totalPoints = 0; function drawPoint(x, y, color) { ctx.fillStyle = color; ctx.fillRect(x, y, 1, 1); // Disegna un punto come un piccolo quadrato di 1x1 pixel } function estimatePi() { const x = Math.random() * canvas.width; const y = Math.random() * canvas.height; const distance = Math.sqrt((x - centerX) ** 2 + (y - centerY) ** 2); if (distance <= radius) { insideCircle++; drawPoint(x, y, 'blue'); } else { drawPoint(x, y, 'red'); } totalPoints++; const estimatedPi = 4 * (insideCircle / totalPoints); const pi25Digits = Math.PI.toFixed(25); document.getElementById('info').innerHTML = `` `Punti totali: ${totalPoints}<br>` + `Stima attuale di π :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ${estimatedPi}<br>` + `Valore vero di π a 25 cifre: ${pi25Digits}...`; } setInterval(estimatePi, 0); </script> </body> </html>