Actio 4 - Código de la portada
Portada realizada por código Python en Drawbot
Basado en Seigaiha Pattern de justvanrossum
#función para crear un semicículo
def circle(x, y, diameter):
#definimos la medida del radio
radius = diameter / 2
oval(x - radius, y - radius, diameter, diameter)
#elemento contenedor de los semicírculos
def element(x, y, diameter, numCircles, relativeStrokeWidth):
step = diameter / numCircles
#usando el número de semicírculos internos determinamos el ancho del contorno de los mismos para que queden iguales
strokeWidth(relativeStrokeWidth * step)
#función que repite los semicírculos
for i in range(numCircles):
circle(x, y, diameter)
diameter -= step
#medida del diametro
diameter = 250
#cantidad de semicírculos
numCircles = 6
#cantidad de repeticiones por fila y columna
numRows = 13
numColumns = 5
#número de fotogramas
numFrames = 120
#tamaño de la imagen
canvasSize = 500
#color del contorno
red1 = 166 / 255
green1 = 219 / 255
blue1 = 54 / 255
#color del la figura
red2 = 62 / 255
green2 = 202 / 255
blue2 = 43 / 255
#inicia la animación
for frame in range(numFrames):
newPage(canvasSize, canvasSize)
frameDuration(1/20)
#creamos el contorno
stroke(red2, green2, blue2)
#creamos el degradado del fondo
linearGradient(
# punto de inicio
(canvasSize/2, 0),
# punto final
(canvasSize/2, canvasSize),
[(red1, green1, blue1), (red2, green2, blue2), (red1, green1, blue1)],
)
#usando una función sinoidal creamos un loop que inicia, llega al máximo valor del contorno, y termina en cero,
phase = 2 * pi * frame / numFrames
relativeStrokeWidth = abs(cos(phase)/2)
#repetimos la animación en cuatro filas
for j in range(numRows + 4):
#desplazamos ciertas filas para que se sobrelapen correctamente
y = 0.5 * diameter + 0.25 * diameter * (numRows - j)
xOffset = 0.5 * diameter * (j % 2)
for i in range(numColumns):
x = diameter * i + xOffset
element(x, y, diameter, numCircles, relativeStrokeWidth)
#guardamos la imagen como GIF
saveImage("a4.gif")