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