Conjunto de mandelbrot (FRACTAL)

Iniciado por rush, Julio 03, 2015, 05:52:03 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 03, 2015, 05:52:03 PM Ultima modificación: Julio 03, 2015, 07:56:51 PM por Expermicid
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:


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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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.


Codigo de Mandelbrot

Código: java
/*@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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Espero les haya gustado y les parezca interesante.

Saludos :)!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


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í:
Podría vivir perfectamente con una mancha de pis en la alfombra, pero qué va, tío: Más complicaciones.