Devo svolgere un esercizio sulla falsariga di un programma che calcola approssimazioni sempre più precise del valore di PIGRECO attraverso la simulazione di lanci casuali di un ago su un foglio di carta a righe. Tale esperimento prende il nome di esperimento dell'ago di Buffon, il quale tizio ipotizzò appunto che il quoziente tra tentativi e successi fosse prossimo a PIGRECO.
Il programma che devo scrivere invece, pur dovendo ottenere lo stesso risultato, deve simulare il lancio casuale di freccette all'interno di un cerchio (con centro 0, 0 e raggio 1) iscritto nel quadrato di gioco con angoli (-1, -1) e (1, 1).
Questo è il Simulatore:
Questa è la classe Arrow:codice:public class ArrowSimulator { public static void main(String[] args) { Arrow a = new Arrow(); for (int i = 1; i <= 1E5; i++) { a. arrow(); } System.out.println((double) a.getTries() / a.getHits()); } }
Il problema è che il risultato finale non tende a PIGRECO! Eppure mi sembra che l'esercizio sia logicamente corretto. C'è qualcuno che può aiutarmi? Graziecodice:import java.awt.geom.Point2D; import java.util.Random; public class Arrow { public Arrow() { hits = 0; tries = 0; generator = new Random(); } public void arrow() { double x = generator.nextDouble() * 2 - 1; double y = generator.nextDouble() * 2 - 1; p = new Point2D.Double(x, y); if (p.distance(0, 0) <= 1) hits++; tries++; } public int getHits() { return hits; } public int getTries() { return tries; } private Point2D.Double p; private Random generator; private int hits; private int tries; }

Rispondi quotando
