Wextensible

Generador de fractales iterativos

Generador

Aplicación

Elemento canvas no soportado.
Ejecución
 Posición Escapes Datos Informe Imagen
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:

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: