Alexandre B A Villares


s140_s141_s142_v2020

Publicado em ANDRADE, Gisele (org.); Multiverso, Rio de Janeiro, RJ : Barleu Edições, 2020.

Esta obra é uma exploração da combinação de duas ideias frequentes na arte algorítmica. A primeira ideia é a recursividade, quando se tem funções que chamam a elas mesmas, até um certo limite, o caso base. Dessa maneira é possível, com muito pouco código, alcançar produtos visuais intrincados que se assemelham a formas fractais. Nos vértices de polígonos regulares foram desenhados outros polígonos e assim sucessivamente em cinco níveis.

A segunda ideia é a introdução de perturbações, ruído, com o uso de valores pseudo-aleatórios. Essas variações remetem a fenômenos naturais e podem propiciar surpresa, variedade, bem como singularidade ao produzir imagens sem repetição. Tornam-se possíveis “múltiplos únicos”, por meio de impressões digitais. Nesta composição a magnitude do efeito da função random() na posição dos vértices dos elementos se reduz a zero nas quatro colunas do meio, intensificada nas bordas.

Trata-se de um desdobramento de estudos produzidos no contexto do experimento artístico iniciado em janeiro de 2018, e em curso, em que são publicados diariamente esboços, sketches, ideias visuais expressadas por meio de programação, sempre acompanhados do código fonte, de forma que o código aqui apresentado é parte integrante do trabalho.

"""
s140_s141_s142_v2020
Alexandre B A Villares - https://abav.lugaralgum.com
Based on 3 sketches from sketch-a-day project in 2018
Running on Processing 3.5.5 with Python Mode (3063)
"""
add_library('pdf')

def setup():
    size(1925, 875)
    randomSeed(20200803)
    pdf = createGraphics(width, height, PDF, "s140_s141_s142_v2020")
    beginRecord(pdf)
    noFill()
    strokeWeight(0.5)
    background(200)
    grid = 4
    space = 175
    translate(space / 2 - 10, space / 2)
    for x in range(grid):
        for y in range(grid):
            px = space / 2 + x * space
            py = space / 2 + y * space
            poly_shape(px, py, n=3+y, rnd=3-x, gen=5, scaling=0)
    translate(space * 3, 0)
    for x in range(1, grid):
        for y in range(grid):
            px = space / 2 + x * space
            py = space / 2 + y * space
            poly_shape(px, py, n=3+y, rnd=0, gen=5, scaling=x)
    translate(space * 3, 0)
    for x in range(1, grid):
        for y in range(grid):
            px = space / 2 + x * space
            py = space / 2 + y * space
            poly_shape(px, py, n=3+y, rnd=x, gen=5, scaling=3)
    endRecord()

def poly_shape(x, y, n, rnd, gen, scaling):
    with pushMatrix():
        translate(x, y)
        radius = map(scaling, 0, 3, gen * 6, gen ** 2 * 1.7)
        ps = createShape()  # to create a polygon on a ps PShape object
        ps.beginShape()
        a, step = 0, TWO_PI / n
        while a < TWO_PI:
            sx = cos(a - PI / 6) * radius
            sy = sin(a - PI / 6) * radius
            ps.vertex(sx + random(-rnd, rnd), sy + random(-rnd, rnd))
            a += step
        ps.endShape(CLOSE)  # end of PShape creation
        shape(ps, 0, 0)  # Draw the PShape
        if gen > 0:  # if the recursion 'distance'/'depth' allows...
            for i in range(ps.getVertexCount()):
                # for each vertex
                pv = ps.getVertex(i)  # gets vertex as a PVector
                # recusively call poly_shape with a smaller gen
                poly_shape(pv.x, pv.y, n, rnd, gen - 1, scaling)