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).

2 comentarios:

  1. Yo también me hice un mandelbrot chico con freebasic
    var i=0,j=0,c=0,w=800,h=600
    dim as double x,y,a,k=3,t=timer()
    ScreenRes w,h,16
    ScreenLock()
    for i=0 to w:for j=0 to h
    x=0:y=0
    for c=0 to &hff
    if x^2+y^2>4 then exit for
    a=x^2-y^2+k/w*i-2
    y=2*x*y-k/h*j+1.5
    x=a
    next
    pset(i,j),c*&h400801
    next j,i
    print using "#.### segundos";timer()-t
    ScreenUnlock()
    Sleep

    ResponderEliminar
  2. Siento responderte tan tarde, pero es que no entro mucho, asi que muchas gracias por tu aporte. ¿Cómo llegaste hasta aqui?

    ResponderEliminar