domingo, 14 de abril de 2013


Gray Scott y FitzHugh Nagumo - Reaction Diffusion System Simulation v.2


 Hola de nuevo. Ayer 13 de Abril del 2013, conseguí optimizar algo más este programa.

 En esos días estaba metido en un nuevo proyecto de un autómata celular y recordando que el método de comprobación de los límites de Gray Scott y el de mi nuevo proyecto son el mismo, (lo que sucede en un límite afecta al límite contrario de la matriz), lo he volví a examinar y me dí cuenta que se podía optimizar algo más, al principio pensaba que el resultado no seria nada del otro mundo, pero... pasar de menos de 4 frames por segundo a 17, 18 o incluso de vez en cuando a 19, me dejó perplejo, puesto que solamente había separado las funciones duplicando las existentes para reducir la comprobación de si era 'arriba - abajo' o 'izquierda - derecha' y eliminado en la llamada a las nuevas funciones las cadenas de texto usadas para ese control.

 Todo esto parecía algo normal, ya que estaba modificando las comprobaciones que realizan unas funciones que son intensamente utilizadas por frame. Eso pensaba, pero para verificar esto, me plantee si la mejora estaba en mi optimización o en el hecho de reducir los datos de las llamadas a las funciones (pasa de 2 a 1), así que volví a reescribir las funciones con las llamadas originales, quedando de nuevo las funciones con 2 datos con llamada, aunque el segundo dato es inútil y aquí sucedió algo de nuevo increíble, los frames por segundo volvieron a ser 3.

 Tras esta decepcionante situación pensé en cambiar las llamadas de cadena por valores numéricos, los cambie a integer y oh sorpresa, de nuevo 17, 18 frames.

 Conclusión, si theoreticalpoodle hubiera utilizado desde el principio valores numéricos y no cadenas de texto (de solo un caracter), habría triplicado el rendimiento pasando de casi 3 frames a 9/10 (también incluido en esta nueva versión del programa) una auténtica barbaridad. Claro que yo tampoco me habría metido en estos lios de intentar optimizar algo que parecía imposible :-p.

 El ejecutable ha sido compilado con FreeBasic 0,24.

 Todos los datos sobre los frames, de este artículo como el de mi anterior han sido realizadas con el método Gray Scott, el método de FitzHugh Nagumo es algo más rápido (llega fácilmente a los 20 frames con la última optimización).

 El teclado es el mismo y usando la tecla 'M' se cambia entre todos estos modos de funcionamiento.

 Solo he añadido las teclas del 1 al 6 para facilitar el acceso a estos nuevos modos.

1 Funcionamiento original de theoreticalpoodle con String

2 Funcionamiento Optimizadas con String

3 Funcionamiento Optimizadas por Separado

4 Funcionamiento Optimizadas por Separado con String

5 Funcionamiento Optimizadas por Separado con Integer

6 Funcionamiento original de theoreticalpoodle con Byte


 Unos vídeos de YouTube


 Muestra del funcionamiento de la versión 2, cuando empieza o se pone lento es como funciona la versión 1.



 Muestra del funcionamiento de la versión 2, integrada en la recopilación de aplicaciones que ya anuncie en mi anterior artículo del blog 'Conjunto de Mandelbrot - Animación v1.1 (6/2/2013 a 14/2/2013)'.

 Como se puede apreciar aumenta las posibilidades de la versión reducida al permitir usar paletas de colores y ampliar la zona de trabajo a costa de disminuir la velocidad de la animación.



La descarga contiene el ejecutable y el código fuente de la nueva versión.
Gray Scott - Reaction Diffusion System Simulation v.2 56,18 kb











martes, 9 de abril de 2013

Gray Scott y FitzHugh Nagumo - Reaction Diffusion System Simulation


El pasado 22 de Marzo del 2013. Decidí modificar y fusionar dos
programas de theoreticalpoodle:

    Gray Scott - Reaction Diffusion System Simulation
(Mayo 24, 2012 12:32)
http://www.freebasic.net/forum/viewtopic.php?f=8&t=19917
(en este publiqué mi versión) y
    FitzHugh Nagumo - Reaction Diffusion System Simulation
(Mayo 24, 2012 12:45)
http://www.freebasic.net/forum/viewtopic.php?f=8&t=19918

 Las modificaciones han sido realizadas en FBEdit con FreeBasic 0.24.

 Los dos programas en realidad son el mismo variando las fórmulas que generan las imágenes y son del tipo de aplicaciones llamadas 'Autómatas Celulares' en los que mediante un conjunto de reglas se muestra el desarrollo o evolución de un sistema. Tal vez el más conocido sea el 'Juego de la Vida' de Conway (del que por cierto hace unos años hice mi versión).

 Los programas de theoreticalpoodle se inician siempre de la misma
manera (teniendo cada uno los puntos de inicio diferentes) y tras unos cientos de ciclos consiguen rellenar la matriz de puntos que forman el área visible (aunque esta área es de 'Frontera periódica', lo que se va por un lado aparece por el otro). Una vez rellena los diseños se repiten de forma cíclica. Este proceso es muy lento en estas aplicaciones, así que paciencia.

 Las características de mi versión son:
- Unifica y acelera en casi un 20% la velocidad de la evolución, pero en este caso y como ya expliqué en el post de Gray Scott, los cálculos que se realizan son muy intensos haciendo la evolución del sistema muy, muy lenta no superando nunca las 3 frames por segundo. Más abajo analizo esto.
- Mantiene los inicios de las versiones de theoreticalpoodle, y al estar unificadas permite intercambiar las fórmulas y ver como evoluciona (amplia la variedad del diseño).
- También permite, iniciarlo vacío (fondo verde) y con el ratón seleccionar los puntos que evolucionaran.
- El uso del ratón siempre está presente, para modificar el diseño una vez entra en el modo de repetición cíclica.
- Muestra en la ventana el uso del teclado.
- Como mi versión sólo pretendía mostrarle a theoreticalpoodle que la forma en que programó sus versiones con tanto elseif no es la más óptima, tiene 4 modos de funcionamiento, cada uno más 'rápido' que el anterior:
    - 1. Sin optimizaciones, probablemente más lento que las versiones originales, porque aquellas no imprimían ningún texto ni controlaban el teclado.
    - 2. Con optimización del color, pasando de más de 90 elseif a solo 10, esto optimizó alrededor del 6, 7 %.
    - 3. Con optimización de las funciones, alrededor del 12 a 13 %.
    - 4. Con las dos optimizaciones anteriores, que sumadas dan el casi 20 %.


 La imagen del principio y única que tengo muestra una comparativa
de las 3 versiones que van incluidas en el archivo rar.


- La del 5001 es la de theoreticalpoodle con el contador de frames. Fue la primera que se inicio.

- La de la derecha con Contador; 5331 fue la segunda que se ejecuto, esta optimizada en los colores y

- La de Contador: 5882 se inicio la tercera, siendo claramente la más rápida, estando optimizado en los colores y en las funciones.

 A los valores del segundo y tercero en ejecutarse habría que añadirles algunos frames 5 o 6 al segundo y 10 a 12 al tercero por lo que se tarda en ir ejecutando cada programa por separado.
 Como se puede comprobar la mayor mejora en el rendimiento se produce en la optimización de las funciones:

5331 - 5001 = 330 / 50 = 6.6 % más rápido con la optimización de colores.

5882 - 5001 = 881 / 50 = 17.62 % más rápido que el original con ambas optimizaciones.

17.62 - 6.6 = 11.02 de las funciones.

 En cualquier caso la velocidad general del programa es muy lenta, no supera los 3 frames nunca en mi ordenador (un Pentium IV Quad Core a 2,4 Mhz).

 ¿Vale la pena la optimización?
Se podría pensar que esta optimización, no vale la pena, pero si vemos como funcionan mi versión y las otras, se puede apreciar esa diferencia de velocidad.
 Este tipo de programas no tienen una utilidad real, son simples demostraciones, aunque en este caso las imágenes se podrían usar como teselas para mosaicos, o si usamos el ratón y situamos el punto inicial en el centro generaría toda una variedad de bonitos Mándalas.


 La descarga contiene la imagen del post, el código fuente de mi modificación y 3 versiones del programa para realizar la comparativa de la imagen.


domingo, 7 de abril de 2013

Conjunto de Mandelbrot - Animación v1.1 (6/2/2013 a 14/2/2013)



Durante este año 2013 me he dedicado  a modificar, ampliar, mejorar o trasladar ciertas aplicaciones que me han gustado relacionadas con los fractales o cosas de física. La primera de ellas ha sido esta ampliación de las animaciones de Tomaaz,
  Tomaaz (28/1/2012)http://forum.basicprogramming.org/index.php?action=dlattach;topic=2450.0;attach=866
  Tomaaz (18/2/2012) http://forum.basicprogramming.org/index.php?action=dlattach;topic=2450.0;attach=921
http://forum.basicprogramming.org/index.php/topic,2450.60.html
dotándolas de una mayor funcionalidad.
Esta versión ha sido programada usando solamente gosub, que son fácilmente sustituibles por sub.

Aunque en esta versión los valores de przesx y przesy, son modificables, hay que tener presente que dependen de la resolución en que se creó la animación. Tras ponerme en contacto con Tomaaz, el propio autor no recordaba como realizó los cálculos de estos valores como me comunicó en:
http://retrogamecoding.org/board/index.php?topic=101.0
donde publicó una nueva versión de sus animaciones que introduciendo el ancho de la ventana las reproduce a esa resolución (Tamaño de la ventana en formato 4:3).
Muchísimas gracias Tomaaz.


Posibles añadidos en versiones futuras:
- Seleccionar el punto de destino usando como base la representación total del conjunto de Mandelbrot y seleccionarlo con el ratón.
- Añadir más curvas.
- Editor de paletas de colores compatible con los Maps.
-...

Unas cuantas imágenes del programa. Lo explican mejor que mil palabras.
Empezamos por unos mosaicos.





Esta, casi parece un foto montaje


Una paleta de colores de escala de grises, el programa tiene más de 20 paletas propias y también usa los archivos maps de Fracting (148).


Varias ventanas superpuestas.



Y mejor que mil imágenes una animación del programa.




Descargas:
Las imágenes del directorio ejemplos (son las mismas que aquí se muestran) no son montajes, han sido creadas con el programa y transformadas a jpg con Paint Shop Pro.
Usando FreeBasic 0,16
http://www.mediafire.com/download.php?008j9srj17tk8k7
Esta versión fue publicada el 14 de Febrero en
http://forum.basicprogramming.org/index.php/topic,2450.135.html
y el 18 de Febrero en
http://retrogamecoding.org/board/index.php?topic=101.0

Con posterioridad modifiqué el programa para eliminar el problema que hay con las ventanas, que si se cierran durante las mosaicos dejan su rastro.
Como curiosidad que no logro entender he mejorado el rendimiento general, que en la primera animación es de unos 4 frames, pasando de los 22 a más de 26 una barbaridad, ya que ha sido simplemente cambiando el orden de la definición de las variables double (¿fallo del compilador?).
También he adaptado el código fuente para que fuera compatible con FreeBasic 0.24, aunque esto ha hecho que el funcionamiento del teclado con la tecla Alt deje de funcionar. Esta versión sigue siendo compatible con FreeBasic 0.16 (sin el problema de teclado antes mencionado y haciendo el ejecutable más pequeño).
He juntado todas las versiones en un archivo rar
http://www.mediafire.com/download.php?z0v29dwv97wsbl9

Actualmente el programa ha evolucionado ha una recopilación de unas 50 aplicaciones encontradas por Internet, entre fractales y cosas de física como ya anunciaba al principio del post (todo en un mismo código fuente y ejecutable, con cosas creadas o modificadas por mi y otras copiadas tal cual las publicaron), de momento no hay nada posteado, pero si alguien esta interesado que me lo haga saber y subiré el ejecutable (no habrá código fuente mientras no cuente con los permisos de los autores).

viernes, 5 de abril de 2013

Fractal Slogro


Generador de formas parecidas a un coral, algas o ramas de árboles en su versión más básica de funcionamiento.


Múltiples tipos de coloreado que se pueden aplicar una vez generada la imagen.




Mutación conseguida tras apretar la tecla B de las imágenes anteriores:


Imágenes casi reales.



Múltiples puntos de inicio.




Si se eliminan las partículas flotantes o se guarda la imagen mientras se va generando se pueden obtener unos marcos de fotos chulos.



Múltiples colores aleatorios en distintas ramas.



Múltiples mini corales cada uno de un color.


Imágenes más complejas se pueden lograr si se interactúa con el programa mientras va creando la imagen. Como cráteres o montañas





Formas semi gaseosas.


O los manteles de la abuela.



Esporas, pieles...




Tejidos.



Imágenes que parecen hechas con técnicas de ray tracing.




Y cómo se puede ver en la primera imagen, textos con diversas propiedades, observen que la tercera imagen con mi nombre también parece hecha con ray tracing.





Como se puede comprobar muchas de las imágenes son casi iguales, cambiando los colores, fijense en las que aparece el coral rojo y las 3 siguientes, son la misma, la siguiente imagen es una mutación (tras apretar la B), las 2 imágenes siguientes que parecen reales, los anillos que parecen ray tracing lo mismo y las 3 últimas con mi nombre también son la misma y esta es una de las grandes virtudes del programa, ya que generar la imagen es un proceso muy lento, pueden ser varios minutos, mientras que cambiar el color solo depende del número de partículas (puntos que termina dibujando y sobre los que se realizan los cálculos para generar la imagen), pudiéndose en tiempo real si son menos de 300.000 a unos pocos segundos en el caso de 20.000.000, teniendo 25 fórmulas de generación de colores, 21 de ellas modificables casi ilimitadamente (los valores de un número entero).


      Los 25 tipos de coloreados son:
1 - Fijo de color rojo, que es con el que se inicia el programa.
1 - Fijo de color aleatorio, cambia cada vez que se le da a B o N.
1 - Con los colores aleatorios constantemente cambiando, incluso después de generar la imagen, este produce un tono grisáceo, y es útil para ser usado en combinación con el siguiente.
1 - Por ramas de colores, este en si no tiene color, sino que toma el color de la nueva partícula del color de la rama con que choca. Este tipo de coloreado es especial porque mientras se genera la imagen si el usuario va cambiando entre los tipos de coloreado los colores de las ramas van variando, su funcionamiento puede ser algo raro, pero es sencillo de entender si miramos el programa, en él los colores se crean usando 2 variables. Una que almacena el ciclo en que la partícula se paraliza y otra que almacena el color de la  rama sobre la que se paralizó. Este tipo usa esta segunda variable.


Estos son los fijos, ahora a los que se les puede modificar el color tras generar la imagen.
1 - Que permite cambiar el color de las ramas del coloreado por ramas (el 'especial').
20 - Que usando los ciclos producen diferentes tipos de degradados.

Estoy creando un manual y espero tenerlo pronto. Cuando este actualizaré los archivos.

 Unos vídeos, con distintas cantidades de partículas:




Descargas:
Los dos archivos contienen el ejecutable, código fuente, 2 archivos de textos y 64 imágenes de pruebas realizadas por el programa, las del archivo BMP son las originales grabadas con el programa, las jpg son las versiones comprimidas en este formato, pero con una gran perdida de brillo. Recomiendo los BMP y el uso de alguna aplicación tipo CDisplayEX para su visionado sin tener que descomprimir los archivos (los BMP ocupan 137 MB).

Slogro v.1 - JPG.rar   6,61 MB

Slogro v.1 - BMP.rar  18,05 MB
http://www.mediafire.com/download.php?hlddqd1bt88z2sc


 Este archivo solo contiene 3 imágenes en jpg, el ejecutable, código fuente y los 2 archivos de texto.
Slogro v.1.rar 278 KB
http://www.mediafire.com/download.php?5hrme7h3vukt9i6

domingo, 11 de octubre de 2009

Circunferencia

Aplicación de D.O.S., que permite la creación de varios tipos de curvas (círculos, elipses, estrellas, espirales, polígonos ...), permitiendo controlar todos los parámetros que la crean de manera individual. Se permite la creación simultanea de múltiples curvas.
De momento sólo existe la posibilidad de guardar el resultado como un BMP.

Misma imagen distinto fondo:


Mismo fondo, distinto coloreado de las curvas:


Mosaicos formados por espirales: (la primera imagen también lo es)





Unas estrellas (¿O son flores?):










Una muestra de la variación que se produce al aumentar el número de líneas:






Estos son unos cuantos ejemplos de lo que se puede hacer con el programita. Este dista mucho de estar acabado y es posible que algunas de sus funciones no lo hagan correctamente.
Debido a estar embarcado en otros proyectos este quedó relegado a un segundo plano. Mi intención es continuarlo algún día y añadirle alguna de las siguientes opciones:
- Posibilidad de guardar de forma individual los parámetros de la curva (Creación de librerías de curvas).
- Guardado general de todos los valores de todas las curvas que forman la imagen.
- Bueno, y cualquier otra cosa que se me ocurriese.

El inicio del programa, aunque un poco sobrio, es suficiente para comenzar. Muestra un polígono de 15 lados.
Para ver una ayuda de todas las teclas que se usan en el programa pulsar 'F1'.

Todas las imagenes que aparecen han sido creadas con el programa y grabadas con la opción correspondiente.

Tamaño del archivo: 68.2 KB
Dirección de descarga: http://www.megaupload.com/?d=ZJPIWFB1
http://www.mediafire.com/download.php?w65d1fwkgbba9f8