(es) Las mariposas de El Mozote
(eo) Papilioj de El Mozote
http://dx.doi.org/10.13140/RG.2.2.34092.90243
Descripción artística:
Las mariposas del perdón revoloteando en el cielo azul con nubes blancas.
Motivación:
Un capítulo de la amarga historia de nuestro querido El Salvador.
Descripción técnica:
Se han dibujado una serie de mariposas –con la ecuación polar , con – sobre una nube generada por un algoritmo recursivo probabilístico.
Archivos
Código (CFDG):
#!/usr/bin/cfdg -o salida.png # Copyright 2015 Eduardo Adam Navas López # Este archivo es Software Libre liberado bajo la licencia GNU GPLv3 o su versión más reciente: # http://www.gnu.org/licenses/gpl.html #Para generar la imagen ejecute la siguiente línea: #$ cfdg -x 0.5 -b 0 -s 8000 -v YSLAJF mariposas.cfdg mariposas.png #ADVERTENCIA: Generar una imagen tan grande requiere al menos 4GB de RAM, 2GB de intercambio y mucho tiempo de procesamiento. #Si no tiene tales recursos se recomienda cambiar el parámetro -s a un valor como 1000. NUMSEG = 2500 #Número de segmentos para formar la curva LIMITE = 40 #Intervalo de dibujo de las mariposas: [-lim,lim] LIMITENUBE = 20 LIM_ANG = 360*5 NUMCURVAS = 75 #Número de mariposas a dibujar MAX_BRILLO = 0.8 #Para las mariposas MIN_TAM = 0.1 MAX_TAM = 0.5 CF::Background = [h 215 sat 0.37 b 1] CF::Size = [s (2*LIMITE) (2*LIMITE)] startshape principal shape principal{ nube[] mariposas[z 1] } funcion(th) = exp(cos(th))-2*cos(4*th)+sin(th/12)^5 path mariposa { theta = 0 radio = funcion(theta) xpunto = radio*cos(theta) ypunto = radio*sin(theta) MOVETO(xpunto, ypunto) loop i = NUMSEG [] { theta = i*LIM_ANG/(NUMSEG-1) radio = funcion(theta) xpunto = radio*cos(theta) ypunto = radio*sin(theta) LINETO(xpunto, ypunto) } STROKE(CF::RoundCap)[] } shape mariposas{ loop i = NUMCURVAS []{ mariposa[ x rand(-LIMITE,LIMITE) y rand(-LIMITE,LIMITE) s (MIN_TAM+i*(MAX_TAM-MIN_TAM)/(NUMCURVAS-1)) r randint(70,110) sat 1 b (i*MAX_BRILLO/(NUMCURVAS-1)) h randint(30,380) ] } } #La gramática de la nube fue adaptada de: #http://www.contextfreeart.org/gallery/view.php?id=1400 shape nube{ nube0[] nube0[x (-20) y (-20)] nube0[x (20) y (-20)] nube0[x (-20) y (20)] nube0[x (20) y (20)] } shape nube0{ loop 4 [x (randint(-LIMITENUBE/2,LIMITENUBE/2))]{ loop 4 [y (randint(-LIMITENUBE/2,LIMITENUBE/2))] nube1[s 0.7 b 3] } } shape nube1 rule { nube2[] nube1[x 4] #nube1[x (if(randint(),-LIMITENUBE/5,LIMITENUBE/5))] } rule { nube2[] #nube1[y 4] nube1[y (if(randint(),-LIMITENUBE/10,LIMITENUBE/10))] } rule 0.3 { nube1 [r 80] nube1 [r -80] } rule { nube1[s 0.85] } shape nube2 { nube3[a -100] } shape nube3 { #Al cambiar la escala aquí cambia la densidad de la nube: #s>15 genera una nube espesa y redondeada en los bordes #s<5 genera una nube tipo humo CIRCLE[b 1 a 0.03 s 10] }
No hay comentarios:
Publicar un comentario