(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