Nada, que después de encontrarse uno con que alguien se las arreglo para hacer este fractal con redcode [ http://impomatic.blogspot.com/2011/01/dragon-curve-in-redcode.html ] (para quitarse el sombrero, vaya :P !) no se puede menos que intentarlo en otro lenguaje, y a falta de poder tirar de los gráficos de tortuga el python por cosas de la vida, la siguiente opción es logo.
Mostrando entradas con la etiqueta fractal. Mostrar todas las entradas
Mostrando entradas con la etiqueta fractal. Mostrar todas las entradas
martes, 11 de enero de 2011
lunes, 20 de septiembre de 2010
Sonido fractal (experimento)
Update: corregido un detalle que podría causar un error al dividir por 0
La idea (no me acuerdo de donde salio, la verdad) es diseñar un fractal y "mostrarlo" a través de un archivo de música. El fractal elegido es una conjunto de Cantor por que es simple, y porque se puede presentar en un formato de 1 dimensión, de tiempo en este caso y otra que aquí será la frecuencia. Este script genera un archivo wave (.wav) basandose en esa idea.
La idea (no me acuerdo de donde salio, la verdad) es diseñar un fractal y "mostrarlo" a través de un archivo de música. El fractal elegido es una conjunto de Cantor por que es simple, y porque se puede presentar en un formato de 1 dimensión, de tiempo en este caso y otra que aquí será la frecuencia. Este script genera un archivo wave (.wav) basandose en esa idea.
jueves, 15 de julio de 2010
Structure Synth y Sunflow, diseño en 3D
Hoy traigo un par de herramientas, de las que supe por un mail, son Structure Synth y Sunflow.
Structure Synth se encarga de la parte del diseño, con una peculiaridad, en vez de hacer las figuras a mano, se las "describe" a través de una gramatica... para entendernos, se programan, pero a diferencia de la mayoria de los lenguajes, no hay variables (hay parámetros, pero solo unos predefinidos) ni condiciones, todo está definido como un conjunto de figuras ("rules", reglas), que son algunas figuras básicas (cubos, esferas, lineas...). El truco suele estar en usar la recursividad de las reglas (que una misma regla se llame a si misma, lo que lo hace ideal para generar fractales) y , aunque menos, las repeticiones, como repetir muchos cubos para hacer una especie de aro.
Solo un comentario, si usas GNU/Linux, probablemente el paquete del repositorio falle, así como la compilación desde el código, a falta de otra solución mejor, se puede usar Wine con el paquete de Windows, que sorprendentemeteva muy bien es usable aún emulado, supongo que porque no usa ninguna librería única de Windows (¿?)
Página web: http://structuresynth.sourceforge.net/
Descarga: http://structuresynth.sourceforge.net/download.php
Sunflow se encarga de la parte del renderizado, si exportamos las imágenes de Structure Synth, (F6) y se las pasamos a Sunflow, el resultado será mucho mejor que el propio de Structure Synth.
Este funciona perfectamente con GNU/Linux (está en java).
Página web: http://sunflow.sourceforge.net/
Descarga: http://sunflow.sourceforge.net/index.php?pg=down (o el sistema de paquetes de tu SO)
En los próximos post intentaré hacer un tutorial sobre Structure Synth (el uso básico de Sunflow, a partir de archivos ya generados, es fácil), ya que no hay ninguno por la red.
Sin más dilación algunas muestras de lo que se puede hacer con estos dos programas:
La primera es obra de Vishkey, responsable de que haya encontrado estos programas, es un triángulo fractal:
set maxobjects 1000000
R1
rule r1 maxdepth 5 > c2 { //El 5 hace referencia a la profundidad del fractal
{s 0.5 hue 5} R1
{s 0.5 x 1 hue 5} R1
{s 0.5 y 0.865 x 0.5 hue 5} R1
}
rule c2 {
linea
{rz 60 x 0.25 y 0.433} linea
{rz -60 x -0.25 y 0.433} linea
}
rule linea {
{s 1 0.1 0.1} box
}
Otro código del mismo autor (con este me tome la libertad de bajar el maxdepth a 50 porque sino, con Wine, el renderizado no era posible):
r2
rule r2 maxdepth 100 {
4 * {rz 90 hue 4} r1
{ s 0.75 z 1 rz 30 a 39} r2
}
rule r1 maxdepth 100{
box
{s 0.9 y 0.3 rz 5} r1
}
Un ejemplo de la web, que también tiene su interes:
/*
Sample Torus.
*/
set maxdepth 100
r1
36 * { x -2 ry 10 } r1
rule r1 maxdepth 10 {
2 * { y -1 } 3 * { rz 15 x 1 b 0.9 h -20 } r2
{ y 1 h 12 a 0.9 rx 36 } r1
}
rule r2 {
{ s 0.9 0.1 1.1 hue 10 } box // a comment
}
rule r2 w 2 {
{ hue 113 sat 19 a 23 s 0.1 0.9 1.1 } box
}
Y por último, un aporte propio:
/*
Trisquel Structure Synth figure.
*/
set maxdepth 75
{ color #195EB9 } base
rule spiral_base {
{ x 1 rz 6 ry 6 s 0.975 } spiral_base
{ s 1 } box
}
rule arm1 {
{ rx 140 } spiral_base
}
rule arm2 {
{ rx 60 ry 36 rz 120 } spiral_base
}
rule arm3 {
{ ry -60 rz 180 } spiral_base
}
rule base {
arm1
arm2
arm3
{ s 2} sphere
}
Hasta la próxima.
Structure Synth se encarga de la parte del diseño, con una peculiaridad, en vez de hacer las figuras a mano, se las "describe" a través de una gramatica... para entendernos, se programan, pero a diferencia de la mayoria de los lenguajes, no hay variables (hay parámetros, pero solo unos predefinidos) ni condiciones, todo está definido como un conjunto de figuras ("rules", reglas), que son algunas figuras básicas (cubos, esferas, lineas...). El truco suele estar en usar la recursividad de las reglas (que una misma regla se llame a si misma, lo que lo hace ideal para generar fractales) y , aunque menos, las repeticiones, como repetir muchos cubos para hacer una especie de aro.
Solo un comentario, si usas GNU/Linux, probablemente el paquete del repositorio falle, así como la compilación desde el código, a falta de otra solución mejor, se puede usar Wine con el paquete de Windows, que sorprendentemete
Página web: http://structuresynth.sourceforge.net/
Descarga: http://structuresynth.sourceforge.net/download.php
Sunflow se encarga de la parte del renderizado, si exportamos las imágenes de Structure Synth, (F6) y se las pasamos a Sunflow, el resultado será mucho mejor que el propio de Structure Synth.
Este funciona perfectamente con GNU/Linux (está en java).
Página web: http://sunflow.sourceforge.net/
Descarga: http://sunflow.sourceforge.net/index.php?pg=down (o el sistema de paquetes de tu SO)
En los próximos post intentaré hacer un tutorial sobre Structure Synth (el uso básico de Sunflow, a partir de archivos ya generados, es fácil), ya que no hay ninguno por la red.
Sin más dilación algunas muestras de lo que se puede hacer con estos dos programas:
La primera es obra de Vishkey, responsable de que haya encontrado estos programas, es un triángulo fractal:
set maxobjects 1000000
R1
rule r1 maxdepth 5 > c2 { //El 5 hace referencia a la profundidad del fractal
{s 0.5 hue 5} R1
{s 0.5 x 1 hue 5} R1
{s 0.5 y 0.865 x 0.5 hue 5} R1
}
rule c2 {
linea
{rz 60 x 0.25 y 0.433} linea
{rz -60 x -0.25 y 0.433} linea
}
rule linea {
{s 1 0.1 0.1} box
}
Otro código del mismo autor (con este me tome la libertad de bajar el maxdepth a 50 porque sino, con Wine, el renderizado no era posible):
r2
rule r2 maxdepth 100 {
4 * {rz 90 hue 4} r1
{ s 0.75 z 1 rz 30 a 39} r2
}
rule r1 maxdepth 100{
box
{s 0.9 y 0.3 rz 5} r1
}
Un ejemplo de la web, que también tiene su interes:
/*
Sample Torus.
*/
set maxdepth 100
r1
36 * { x -2 ry 10 } r1
rule r1 maxdepth 10 {
2 * { y -1 } 3 * { rz 15 x 1 b 0.9 h -20 } r2
{ y 1 h 12 a 0.9 rx 36 } r1
}
rule r2 {
{ s 0.9 0.1 1.1 hue 10 } box // a comment
}
rule r2 w 2 {
{ hue 113 sat 19 a 23 s 0.1 0.9 1.1 } box
}
Y por último, un aporte propio:
/*
Trisquel Structure Synth figure.
*/
set maxdepth 75
{ color #195EB9 } base
rule spiral_base {
{ x 1 rz 6 ry 6 s 0.975 } spiral_base
{ s 1 } box
}
rule arm1 {
{ rx 140 } spiral_base
}
rule arm2 {
{ rx 60 ry 36 rz 120 } spiral_base
}
rule arm3 {
{ ry -60 rz 180 } spiral_base
}
rule base {
arm1
arm2
arm3
{ s 2} sphere
}
Hasta la próxima.
Etiquetas:
3d,
fractal,
grafico,
ideas ajenas
lunes, 22 de marzo de 2010
Logo y colorines ( y II )
Volvemos con la segunda parte sobre Logo, con unas cuantas figuras...
La primera, para empezar es bastante facil:
Y "
Fractales
Pasamos a algo mas dificil :)}
¿Que es un fractal? (segun Wikipedia)
Llamando a "
Veamos como funciona, y de paso como hacer que el codigo sea aplicable a cualquier figura, la idea es esta:
No necesita explicacion, declaramos la funcion fractal_cuadrado, con los argumentos long (longitud) y prof (profundidad)
El caso base, si ya se llego al ultimo nivel de profundidad, ya se acabo
]
Como se puede ver, es practicamente el mismo codigo que para dibujar un cuadrado, solo se le añade
Es decir, que en cada esquina del cuadrado, se dibuja un cuadrado mas pequeño, y en cada esquina de ese cuadrado, otro aun mas pequeño, asi hasta que se alcance la profundidad maxima (a este proceso se le llama recursion)
Fin de la funcion
Ahora veamos como modificar el codigo para que funcione con otras figuras, el caso base no cambia...
... asi que solo nos queda el
]
De nuevo,es bastante reconocible la parte que dibuja el cuadrado (esto se explica en el otro post sobre logo), asi que...
]
Solo falta el
Y llamando a "
(¿A nadie le suena de algo?)
Y para ir acabando... arboles binarios!
Un arbol binario es uno que del que salen dos arboles (tambien binarios), de los que vuelven a salir dos, y ... bueno, ya cojeis la idea
Veamos como va, se que habra a quien le aburra y lo vea claro, pero, si ese es el caso, siempre os podeis saltar la explicacion... (Esta vez voy a prescindir del codigo)
La idea basicamente es hacer que cada vez que el arbol avance, se divida en dos y repetir en cada uno de los dos el mismo proceso, para que esto se pueda hacer, ademas hay que volver a la posicion original cada vez (si, simple y rapido)
Llamando a
Y eso es todo con Logo!
Pero espera... esto es "Logo y colorines" !! , hace falta algo de color, volvamos a la primera imagen:
La abrimos con GIMP y usamos en los filtros Artistico>GIMPresionista, el Crosshatch, obtenemos esto:
Seleccionamos todo lo que no es el fondo, y se aplica una mezcla de Quemado, con forma Radial, con centro en el centro del circulo, el resultado:
No es gran cosa, pero tendra que valer :P
Ahora si, hasta otra!
[Referencias]
http://et.bgcbellevue.org/logo/fractals.html
La primera, para empezar es bastante facil:
to figura1 :veces :tamanho
repeat :veces[right 360/:veces
repeat 360[ forward :tamanho right 1 ]
]
end
Y "
figura1 72 2
" resulta en ...Fractales
Pasamos a algo mas dificil :)}
¿Que es un fractal? (segun Wikipedia)
Un fractal es un objeto semigeométrico cuya estructura básica, fragmentada o irregular, se repite a diferentes escalas.[1] Una mejor manera para comprender el comportamiento fractal de nuestro universo es considerar la siguiente definición: "Patrones que se repiten a distintas escalas".Dejemos aparte todo lo de "autosimilar", "dimensiones topologicas" y demas... lo mas comprensible es que "se repite a distintas escalas" y "se define mediante un simple algoritmo recursivo", vamos a probar...
A un objeto geométrico fractal se le atribuyen las siguientes características:[2]
- Es demasiado irregular para ser descrito en términos geométricos tradicionales.
- Posee detalle a cualquier escala de observación.
- Es autosimilar (exacta, aproximada o estadística).
- Su dimensión de Hausdorff-Besicovitch es estrictamente mayor que su dimensión topológica.
- Se define mediante un simple algoritmo recursivo.
to fractal_cuadrado :long :prof
if prof <= 0 [stop]
repeat 4[ forward :long
right 90
fractal_cuadrado :long/(2.5) :prof-1
]
end
Llamando a "
fractal_cuadrado 300 5
", conseguimos esto:Veamos como funciona, y de paso como hacer que el codigo sea aplicable a cualquier figura, la idea es esta:
to fractal_cuadrado :long :prof
No necesita explicacion, declaramos la funcion fractal_cuadrado, con los argumentos long (longitud) y prof (profundidad)
if prof <= 0 [stop]
El caso base, si ya se llego al ultimo nivel de profundidad, ya se acabo
repeat 4[ forward :long
right 90
fractal_cuadrado :long/(2.5) :prof-1
]
Como se puede ver, es practicamente el mismo codigo que para dibujar un cuadrado, solo se le añade
fractal_cuadrado :long/(2.5) :prof-1
al final, lo que hace que en cada esquina repita el proceso completo, pero haciendolo mas pequeño y con menos profundidad (sino acabaria siendo infinita)Es decir, que en cada esquina del cuadrado, se dibuja un cuadrado mas pequeño, y en cada esquina de ese cuadrado, otro aun mas pequeño, asi hasta que se alcance la profundidad maxima (a este proceso se le llama recursion)
end
Fin de la funcion
Ahora veamos como modificar el codigo para que funcione con otras figuras, el caso base no cambia...
to fractal2 :lados :long :prof
if prof <= 0 [stop]
... asi que solo nos queda el
repeat 4[ forward :long
right 90
fractal_cuadrado :long/(2.5) :prof-1
]
De nuevo,es bastante reconocible la parte que dibuja el cuadrado (esto se explica en el otro post sobre logo), asi que...
repeat :lados[ forward :long
right 360/:lados
fractal2 :lados :long/(2.5) :prof-1
]
Solo falta el
fractal2 :lados :long/(2.5) :prof-1
, la unica parte que hay que cambiar es la de :long/(2.5)
, el problema es que este numero (el 2.5 ) es algo arbitrario, debe ser lo suficientemente alto como para separar las figuras "que salen de las esquinas", distancia que es mayor a medida que aumenta :log
, pero sin pasarse, por ejemplo :long/(2+((:lados/100)*(:lados*:lados)))
servira, asi , el codigo quedato fractal2 :lados :long :prof
if prof <= 0 [stop]
repeat :lados[ forward :long
right 360/:lados
fractal2 :lados :long/(2+((:lados/100)*(:lados*:lados))) :prof-1
]
end
Y llamando a "
fractal2 3 200 4
"...(¿A nadie le suena de algo?)
Y para ir acabando... arboles binarios!
Un arbol binario es uno que del que salen dos arboles (tambien binarios), de los que vuelven a salir dos, y ... bueno, ya cojeis la idea
to arbol_binario :long :prof :grados
if prof <= 0 [ stop ]
forward :long
left :grados
arbol_binario :long/2 :prof-1 :grados
right :grados*2
arbol_binario :long/2 :prof-1 :grados
left :grados
back :long
end
Veamos como va, se que habra a quien le aburra y lo vea claro, pero, si ese es el caso, siempre os podeis saltar la explicacion... (Esta vez voy a prescindir del codigo)
La idea basicamente es hacer que cada vez que el arbol avance, se divida en dos y repetir en cada uno de los dos el mismo proceso, para que esto se pueda hacer, ademas hay que volver a la posicion original cada vez (si, simple y rapido)
Llamando a
arbol_binario 200 10 30
tenemos:Y eso es todo con Logo!
Pero espera... esto es "Logo y colorines" !! , hace falta algo de color, volvamos a la primera imagen:
La abrimos con GIMP y usamos en los filtros Artistico>GIMPresionista, el Crosshatch, obtenemos esto:
Seleccionamos todo lo que no es el fondo, y se aplica una mezcla de Quemado, con forma Radial, con centro en el centro del circulo, el resultado:
No es gran cosa, pero tendra que valer :P
Ahora si, hasta otra!
[Referencias]
http://et.bgcbellevue.org/logo/fractals.html
Etiquetas:
fractal,
grafico,
logo,
pasando el rato
Suscribirse a:
Entradas (Atom)