Divergente

2023-04-07

"""2023-04-07"""
from random import choice
from py5 import *
from pathlib import Path


FOLDER = Path(__file__).parent.resolve()
IMG_FOLDER = FOLDER / 'images'


paleta_base = [
    color(0, 255, 0),
    color(0, 255, 200),
    color(100, 255, 80),
    color(140, 235, 73),
    color(50, 255, 99),
    color(75, 255, 200),
]

paleta_diversa = [
    # Red, Green, Blue
    color(255, 0, 0),
    color(200, 0, 0),
    color(150, 0, 0),
    color(200, 0, 200),
    color(150, 0, 255),
    color(100, 0, 255),
    color(50, 0, 255),
    color(102, 0, 255),
]


def settings():
    size(800, 800)


def fundo():
    for i in range(0, 801):
        if i % 2:
            stroke(i / 4, 0, i)
        else:
            stroke(0, i / 4, i)
        line(0, i, 800, i)


def par_bagunca(faixa_bagunca):
    bx = random(-faixa_bagunca, faixa_bagunca)
    by = random(-faixa_bagunca, faixa_bagunca)
    return bx, by


def quadrado_molnar(x, y, lado, faixa_bagunca, preencher):
    bx, by = par_bagunca(faixa_bagunca)
    x0, y0 = x - lado / 2 + bx, y - lado / 2 + by
    bx, by = par_bagunca(faixa_bagunca)
    x1, y1 = x + lado / 2 + bx, y - lado / 2 + by
    bx, by = par_bagunca(faixa_bagunca)
    x2, y2 = x + lado / 2 + bx, y + lado / 2 + by
    bx, by = par_bagunca(faixa_bagunca)
    x3, y3 = x - lado / 2 + bx, y + lado / 2 + by
    if preencher:
        no_stroke()
        fill(preencher)
    else:
        no_fill()
        stroke(color(0,0,0))
    quad(x0, y0, x1, y1, x2, y2, x3, y3)


def elementos(x, y, lado, idx_linha, idx_coluna):
    # Tamanho do novo elemento
    lado_interno = lado - 10

    # Escolhe cor de preenchimento
    if int(random(400)) == 0:
        preenchimento = choice(paleta_diversa)
    else:
        preenchimento = choice(paleta_base)

    # Primeiro elemento é preenchido
    bagunca = lado_interno * (idx_linha / 85)
    quadrado_molnar(x, y, lado_interno, bagunca, preenchimento)
    # Segundo elemento é apenas a linha
    bagunca = lado_interno * (idx_coluna / 150)
    quadrado_molnar(x, y, lado_interno, bagunca, None)


def setup():
    fundo()
    rect_mode(CENTER)
    colunas = 20
    linhas = 20
    margem = 50
    w = (800 - margem * 2) / colunas
    for j in range(linhas):
        for i in range(colunas):
            x = margem + w / 2 + i * w
            y = margem + w / 2 + j * w
            elementos(x, y, w, j, i)
    img = get(0, 0, 800, 800)
    img.save(IMG_FOLDER / "2023-04-07.jpg")

run_sketch()