jgdoncel
1/29/2014 - 10:23 PM

Estimar el valor de Pi usando el método de la "Aguja de Buffon" http://http://es.wikipedia.org/wiki/Aguja_de_Buffon

Estimar el valor de Pi usando el método de la "Aguja de Buffon" http://http://es.wikipedia.org/wiki/Aguja_de_Buffon

// Tomar una aguja de 1cm y un papel con líneas paralelas a 2cm
// Lanzar la aguja sobre el papel, cada vez que la aguja corta una linea
// cuenta como un acierto
// pi (aprox) = intentos / aciertos

import java.util.Random;
import java.util.Scanner;

public class BuffonPiEstimation
{
    public static void main(String[] args) 
    {
        System.out.println("Aguja de Buffon");
        System.out.println("Introducir número de lanzamientos: ");
        
        Scanner in = new Scanner(System.in);
        int tries = in.nextInt();

        Random generator = new Random(42);
        
        int hits = 0;
        
        for (int i = 0; i < tries; i++) {
            // Generar yLow la distancia de un extremo de la aguja a la línea
            double yLow = generator.nextDouble()*2;
            // Generar un ángulo entre 0 y 180 grados
            double angle = generator.nextDouble()*180;
            // Obtener la altura del otro extremo de la aguja
            double yHigh = yLow + Math.sin(Math.toRadians(angle));
            // Si el extremo está a mayor altura que la siguiente linea
            // es un acierto
            if (yHigh >= 2) {
                hits ++;
            }
        }
        
        double piEstimate = (float) tries / hits;
        
        System.out.println();
        System.out.println(piEstimate);
        
    }   
}