/* PiMC.java * * Rapport du nombre de points dans le 1/4 de cercle de rayon 1 * centré à l'origine et de coordonnées positives (1er quadrant) * au nombre de points du carré O(0;0) I(1;0) A(1;1) J(0;1) * * echo "set term dumb 40 20;set nokey;set xrange [0 : 1]; set yrange [0 : 1]; plot sqrt(1-x**2)"|gnuplot * * 1 *********---+------+-----+----++ * + + ****** + + + * | ***** | * 0.8 ++ *** ++ * | *** | * | ** | * 0.6 ++ Intérieur *** ++ * | du ** | * | quart de cercle ** | * | * | * 0.4 ++ **++ * | **| * | *| * 0.2 ++ *+ * | * * + + + + + * * 0 ++----+-----+------+-----+----+* * 0 0.2 0.4 0.6 0.8 1 * * Jean-Paul Davalan * */ import java.applet.*; import java.awt.*; import java.lang.*; public class PiMC extends Applet { public long niter = 0, nit; public double pi = 0.0, somme = 0.0; public void init() { setIter(getParameter("iterations")); } public void paint(Graphics g) { g.clearRect(0, 0, 450, 40); g.drawString("Pi est évalué à 4 * " +somme+" / "+niter+" = " + pi, 10, 10); g.drawString("après avoir choisi au hasard " + niter + " points dans le carré.", 10, 30); } public void setIter(String s) { long i; double a, b; if(s == null) { nit = 0; } else { nit = Long.parseLong(s); } for(i=1; i <= nit; i++) { niter++; a = Math.random(); b = Math.random(); somme += (a*a+b*b < 1)? 1 : 0; } pi = 4*somme/niter; repaint(); } }