Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pi;
- import java.awt.Point;
- import java.util.stream.LongStream;
- /**
- *
- * @author Franco
- */
- public class PiSuperficie {
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) {
- // ancho de la "matriz" en "pixeles". El numero debe ser par para que el radio sea impar
- // y la ecuacion final para calcular el perimetro tenga sentido y no se repitan "pixeles"
- Long ancho = 50_000l;
- // el radio es 1 "pixeles" menor a la "matriz" para evitar problemas de redondeo
- Long radio = ancho - 1;
- System.out.println("Corriendo simulacion con Long y Double");
- // recorremos la "matriz" y sumamos los "pixeles" que estan a una distancia
- // igual o menor al radio del circulo. Los demas son ignorados.
- // Para ahorrar calculos, solo computamos 1 cuarto de circulo y luego multiplicamos por 4
- Long cantPuntos = LongStream.range(0, ancho)
- .parallel()
- .map(x -> {
- return LongStream.range(0, ancho)
- .parallel()
- .filter(y -> {
- double hipotenusa = Point.distance(0, 0, x, y);
- //ignomramos los pixeles que se van a superponer cuadno multipliquemos
- // por 4 esta porcion del perimetro
- return x != 0 && y != 0 && Math.abs(hipotenusa) <= radio;
- }
- ).count();
- }
- ).sum();
- double superficie = (cantPuntos * 4 + (4 * radio) - 3); //sumamos los fila y columna central que ignoramos en el calculo anterior
- double pi = superficie / Math.pow(radio, 2);
- System.out.println("superficie = " + superficie);
- System.out.println("radio = " + radio);
- System.out.println("pi = " + pi);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement