Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

Archivo del blog

sábado, 24 de diciembre de 2022

 Dibujar fractal de Mandelbrot

Un fractal de Mandelbrot es una imagen matemática que se crea a partir de una fórmula iterativa y se representa gráficamente en un plano complejo. Cada punto del plano se asigna un color en función de la cantidad de iteraciones que se necesitan para que el valor del número complejo alcance un cierto umbral.


Código java (AI_MandelbrotG.java):

package ai_mandelbrotg;

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

public class AI_MandelbrotG extends JPanel {

    public static int WIDTH = 480;
    public static int HEIGHT = 300;
    public static final int MAX_ITERATIONS = 64;

    @Override
    public void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);

        for (int x = 0; x < WIDTH; x++) {
            for (int y = 0; y < HEIGHT; y++) {

                // Calcula el valor de c para el punto (x, y)
                double cReal = (x - WIDTH / 2) * 4.0 / WIDTH;
                double cImag = (y - HEIGHT / 2) * 4.0 / WIDTH;

                // Calcula el valor de z para el punto (x, y)
                double zReal = 0;
                double zImag = 0;

                // Itera hasta encontrar el valor de z para el punto (x, y)
                int iterations = 0;
                while (zReal * zReal + zImag * zImag < 4 && iterations < MAX_ITERATIONS) {
                    double zRealTemp = zReal * zReal - zImag * zImag + cReal;
                    zImag = 2 * zReal * zImag + cImag;
                    zReal = zRealTemp;
                    iterations++;
                }

                // Establece el color para el punto (x, y) en función del número de iteraciones
                int colorValue = 255 * iterations / MAX_ITERATIONS;
                graphics.setColor(new Color(colorValue, colorValue, colorValue));
                graphics.drawLine(x, y, x, y);
            }
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Fractal de Mandelbrot");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        AI_MandelbrotG panel = new AI_MandelbrotG();
        panel.setPreferredSize(new Dimension(WIDTH, HEIGHT));
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

}


Resultado:



Con la tecnología de Blogger.