Underc0de

Programación General => Java => Mensaje iniciado por: rush en Julio 03, 2015, 05:52:03 PM

Título: Conjunto de mandelbrot (FRACTAL)
Publicado por: rush en Julio 03, 2015, 05:52:03 PM
Bueno, pues esta ves les traigo un codigo en java de el conjunto de mandelbrot, El código no es mio propiamente y no se de quien sea, ya que el profesor nos lo  proporciono.

Un poco de historia según la wiki

El conjunto de Mandelbrot es el más conocido de los conjuntos fractales y el más estudiado. Se conoce así en honor al matemático Benoît Mandelbrot.

¿Como se calcula o cual es la ecacuacion para poder ver el fractal?

Este conjunto se define así, en el plano complejo:
Sea c un número complejo cualquiera. A partir de c, se construye una sucesión por recursión:

(https://upload.wikimedia.org/math/1/2/d/12d3322f5960648e712c41e5a7fba307.png)

Si esta sucesión queda acotada, entonces se dice que c pertenece al conjunto de Mandelbrot, y si no, queda excluido del mismo.

Por ejemplo, si c = 1 obtenemos la sucesión 0, 1, 2, 5, 26... que diverge. Como no está acotada, 1 no es un elemento del conjunto de Mandelbrot.

En cambio, si c = -1 obtenemos la sucesión 0, -1, 0, -1,... que sí es acotada, y por tanto, -1 sí pertenece al conjunto de Mandelbrot.

Mandelbrot Wiki (https://es.wikipedia.org/wiki/Conjunto_de_Mandelbrot)

Bueno hasta ahora les e puesto lo que según la wiki, pero en si, que es el Conjunto de mandelbrot visualmente, se los muestro a continuación.

(http://i.imgur.com/5Z1txtk.png)

Codigo de Mandelbrot

Código (java) [Seleccionar]
/*@rush*/
package prmandelbrot;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class PrMandelbrot extends JPanel {

    public static void main(String[] args) {
        JFrame ventana = new JFrame("Conjunto de mandelbrot");
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ventana.getContentPane().add(new PrMandelbrot());
        ventana.setSize(640, 640);
        ventana.setLocation(200, 50);
        ventana.setVisible(true);
    }

    public void paint(Graphics g) {
        int i, j, n, h, w;
        double x, y, cx, cy, xt, yt;
        super.paintComponent(g);
        setBackground(Color.black);
        h = getHeight() / 2;
        w = getWidth() / 2;
        for (i = 0; i < getHeight(); i++) {
            for (j = 0; j < getWidth(); j++) {
                cx = (j - w) / 240.0 - 0.4;
                cy = (i - h) / 240.0;
                x = 0;
                y = 0;
                n = 0;
                while (n < 64 && x * x + y * y < 4) {
                    xt = x * x - y * y + cx;
                    yt = 2 * x * y + cy;
                    x = xt;
                    y = yt;
                    ++n;
                }
                if (n < 64) {
                    g.setColor(new Color(255 - (n * 16) % 256, 0, n * 2));
                    g.fillRect(j, i, 1, 1);
                }
            }
        }
    }   
}


Para poder entender un poco como funciona necesitas saber un poco de números complejos, pero aquí les dejo una pagina que encontré de como dibujar el conjunto de mandelbrot a mano y como es que funciona la formula para calcularlo.

Como dibujar el conjunto de mandelbrot a mano (http://es.wikihow.com/dibujar-el-conjunto-de-Mandelbrot-manualmente)

Espero les haya gustado y les parezca interesante.

Saludos :)!
Título: Re:Conjunto de mandelbrot (FRACTAL)
Publicado por: rand0m en Julio 04, 2015, 09:49:55 AM
Estoy un poco confundido. ¿Estos cálculos tienen alguna aplicación o son una curiosidad matemática?
Ayer mismo empecé a leer un libro de Java8, así que guardaré el código para estudiarlo cuando entienda mejor el lenguaje.

Estuve viendo las diferentes posibilidades y el ejemplo que nos muestras se corresponde con Z=Z2+C.
¿Alguien se anima a reconfigurarlo a Z=Exp[(Z2- 1.00001*Z)/C3]?
El resultado debería ser algo así:
(https://upload.wikimedia.org/wikipedia/commons/c/c1/Mandel_Exp%28_%28Z%5E2%2Bk3xZ%29_C%5E3%29_.jmb.jpg)