Advertisement
francogp

Untitled

Feb 12th, 2015
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.90 KB | None | 0 0
  1. package pi;
  2.  
  3. import java.awt.Point;
  4. import java.util.stream.LongStream;
  5.  
  6. /**
  7.  *
  8.  * @author Franco
  9.  */
  10. public class PiSuperficie {
  11.  
  12.     /**
  13.      * @param args the command line arguments
  14.      */
  15.     public static void main(String[] args) {
  16.         // ancho de la "matriz" en "pixeles". El numero debe ser par para que el radio sea impar
  17.         // y la ecuacion final para calcular el perimetro tenga sentido y no se repitan "pixeles"
  18.         Long ancho = 50_000l;
  19.         // el radio es 1 "pixeles" menor a la "matriz" para evitar problemas de redondeo
  20.         Long radio = ancho - 1;
  21.  
  22.         System.out.println("Corriendo simulacion con Long y Double");
  23.  
  24.         // recorremos la "matriz" y sumamos los "pixeles" que estan a una distancia
  25.         // igual o menor al radio del circulo. Los demas son ignorados.
  26.         // Para ahorrar calculos, solo computamos 1 cuarto de circulo y luego multiplicamos por 4
  27.         Long cantPuntos = LongStream.range(0, ancho)
  28.                 .parallel()
  29.                 .map(x -> {
  30.                     return LongStream.range(0, ancho)
  31.                     .parallel()
  32.                     .filter(y -> {
  33.                         double hipotenusa = Point.distance(0, 0, x, y);
  34.                         //ignomramos los pixeles que se van a superponer cuadno multipliquemos
  35.                         // por 4 esta porcion del perimetro
  36.                         return x != 0 && y != 0 && Math.abs(hipotenusa) <= radio;
  37.                     }
  38.                     ).count();
  39.                 }
  40.                 ).sum();
  41.  
  42.         double superficie = (cantPuntos * 4 + (4 * radio) - 3); //sumamos los fila y columna central que ignoramos en el calculo anterior
  43.         double pi = superficie / Math.pow(radio, 2);
  44.         System.out.println("superficie = " + superficie);
  45.         System.out.println("radio = " + radio);
  46.         System.out.println("pi = " + pi);
  47.     }
  48.  
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement