Escudo de la República de Colombia Escudo de la República de Colombia

ACTIO 4/2020

Está en: Revista ActioNúmerosACTIO 4/2020

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