Generador de fractales iterativos

Generador

Aplicación

Elemento canvas no soportado, la aplicación no funcionará.
Ejecución
     
Zoom
×10
Tamaño punto px
Posiciones y dimensiones
PropiedadesXY
Ancho y alto Canvas
Ancho y alto Fractal
Medidas finales Fractal
Origen de coordenadas
Mover
Trasladar
Punto
Expandir
Girar
Escape
×10
Color
Pre-escapes
Color base:
Resultado:
Soporte Worker:


Detalles

Fractal Este generador de fractales se basa en el algoritmo iterativo de selección de puntos que expliqué en el tema anterior. Se trata de una aplicación cuyo funcionamiento básico es el mismo que el usado en el trazador de gráficas matemáticas, pero ahora al estar específicamente destinado a esta tarea resulta más eficiente.

Además podemos modificar las configuraciones de generación del fractal. La imagen es una captura de uno de los ejemplos incluidos en la aplicación, cuyo original es de 400×400 píxeles.

Recordemos del tema anterior cómo se genera el fractal en pseudo-código:

Declarar plano XY [x1,x2]×[y1,y2]
Bucle x=x1 hasta x=x2
    Bucle y=y1 hasta y=y2
        Bucle seleccionador de puntos
            Si (x,y) cumple la condición de selección
                Salir de este bucle
            Fin si
        Fin bucle
        Si completamos este bucle
            Pintar punto (x,y)
        Fin si         
    Fin bucle
Fin bucle

Espero seguir mejorando algunos aspectos, como disminuir los tiempos de proceso para que se genere más rápidamente el fractal. De todas formas para un plano de 400×400 píxeles suponen un total de 160000 iteraciones de los bucles exteriores (resaltado en amarillo), a las que hay que sumar las de escape del bucle seleccionador (en verde). Por ejemplo, con un valor de escape 30 para el Conjunto Julia en (-0.75,0) obtenemos 1384204 iteraciones en total. En mi ordenador esto lleva unos 5 segundos con Chrome 17.0. El asunto estaría en reducir los tiempos de cálculo matemático y otros procesos como la gestión de colores.

Actualizaciones:

23 Julio 2017: Las medidas del canvas se adaptan al ancho del contenido, cualesquiera que sean esas medidas. Las medidas se ajustan también al redimensionar la ventana. Se incorporan iconos SVG. Se quitan todos los atributos de eventos en línea (onclick, onchange, etc) y se adjudican eventos en la carga del módulo.

11 Octubre 2013: Adaptado para su visualización en dispositivos móviles que tiene un ancho menor de viewport y que soporten eventos de toque (touch events). Ahora el ancho del Canvas se fija en 600×600 píxeles si la pantalla es igual o mayor de ese ancho. En otro caso las medidas del Canvas se ajustan para que quepa en el ancho de pantalla.

30 Junio 2013: Modificaciones debido a un distinto comportamiento de Firefox 18-22 con el soporte transferable. Ver nota de soporte web workers transferable en Firefox 18-22. Las modificaciones afectan al script fractal.js en las funciones que envían y reciben del Worker getWorker() e iteraWorker(). En el worker fractal-worker.js también hay modificaciones comentadas.

14 Abril 2012: Incorporado Web Workers para una ejecución más rápida. Aunque en navegadores que no lo soporten aún puede ejecutarse sin esta opción. Ver más en HTML5 Web Workers. En Chrome 18.0 el Julia de muestra de 400×400 píxeles en (-0.75,0) se ejecuta SIN WORKER en unos 2.5 segundos y CON WORKER (incluyendo Transferable) en menos de 150 ms en promedio de ejecuciones en el mismo ordenador.

28 Marzo 2012: La nueva versión Chrome 18.0 incorpora mejoras en el renderizado de gráficos, especialmente para el elemento <canvas> en su contexto 2D. Esto beneficia al generador de fractales. Ver nota en blog de Chromium. Con chrome://gpu podemos acceder a las características de aceleración de gráficos del ordenador que son usadas por Chrome. Si la aceleración de gráficos por hardware no estuviera disponible, Chrome usará aceleración por software. En Chrome 18.0 el Julia de muestra de 400×400 píxeles en (-0.75,0) se ejecuta en unos 2.5 segundos en el mismo ordenador (que no tiene aceleración por hardware).

20 Marzo 2012: Probado por primera vez en Chrome 17.0, Firefox 11.0, Opera 11.61, Safari 5.1. En Chrome 17.0 el Julia de muestra de 400×400 píxeles en (-0.75,0) se ejecuta en unos 5 segundos en promedio de ejecuciones(la primera ejecución siempre tarda más tiempo, pero si volvemos a ejecutar otra vez el mismo fractal (botón Ejecutar) los tiempos disminuyen) en un ordenador Intel Pentium 4, dual cuore, CPU 3.2GHz, RAM 1.5GB y Windows XP.

Algunas utilidades que se usan en esta aplicación y que explico en este sitio: