File: /home/peppino/Area_Lavori/ese…/Classi/Ago_di_Buffon/Ago.java Pagina 1 di 2 /** * Simulazione dell' esperimento dell' ago di Buffon. * * Georges-Louis Leclerc de Buffon (1707-1788), naturalista francese * ideò il segente esperimento: * Si lascia cadere un ago lungo 1 cm. su un foglio di carta a righe, * spaziate di 2 cm. Se l' ago interseca una riga vale come bersaglio colpito, * altrimenti no. * Buffon ipotizzò un rapportto tentativi/successi = 3,14 (PI greco ) * * La simulazione richiede di generare due numeri casuali per ogni lancio, * uno per descrivere la posizione della punta dell' ago ed uno pe descrivere la * posizione * angolare rispetto all' asse x ( una riga del foglio ), e di * verificare se l' ago tocca una riga della griglia. Effettuare 10000 lanci. * Stabiliamo come generare la posizione dell' estremità inferiore dell' ago. * La sua coordinata x è irrilevante, mentre stabiliamo che la sua coordinata y, * y_bassa, corrisponda ad un qualsiasi numero casuale compreso tra 0 e 2.0; * il metodo nextDouble della classe Random restituisce un numero arbitrario in * virgola mobile compreso tra 0 e 1.0; moltiplicheremo il risultato per 2, per * ottenere un numero casuale compreso tra 0 e 2.0 . * L' angolo alfa, misurato fra l' ago e l' asse x, può avere un qualunque valore * compreso fra 0 e 180 gradi. La posizione dell' estremità superiore dell' ago si * calcola nel modo seguente: y_alta = y_bassa + sin (alfa). * Il bersaglio si considera colpito quando y_alta è almeno uguale a 2. * * * * @autore Peppino * @data 5/11/2003 */ import java.util.Random; public class Ago { // instance variables - replace the example below with your own private int successi; private int lanci; private Random numero_casuale; /** * Construisce un ago */ public Ago() { // initialise instance variables successi = 0; lanci=0; numero_casuale= new Random(); } /** * Lascia cadere l' ago sul foglio e ricorda se esso colpisce una riga. * */ public void lascia_cadere() { double y_bassa = 2 * numero_casuale.nextDouble(); //numero casuale tra 0 e 2.0 double alfa = 180 * numero_casuale.nextDouble(); // angolo casuale tra 0 e 180 gradi // calcola il punto più alto dell' ago double y_alta = y_bassa + Math.sin (Math.toRadians (alfa)); // verifica se la punta (y_alta) interseca una riga if ( y_alta >= 2 ) successi = successi + 1; lanci = lanci + 1; } /** * Mostra il numero di bersagli (successi) File: /home/peppino/Area_Lavori/ese…/Classi/Ago_di_Buffon/Ago.java * * @return successi */ public int mostra_bersagli() { return successi; } /** * Mostra il numero di lanci dell' ago * * @return lanci */ public int mostra_tentativi() { return lanci; } } Pagina 2 di 2