Ruídos 01

2026-03-26

"""2026-03-26
Ruídos 01
Padrão de ruídos gerados a partir de Perlin Noise, com variações de cor e tamanho.
ericof.com
png
Sketch,py5,CreativeCoding
"""

from sketches.utils.draw import canvas
from sketches.utils.helpers import sketches as helpers

import py5


sketch = helpers.info_for_sketch(__file__, __doc__)

cor_fundo = py5.color(0)

passo = 10
multiplicador = 0.015


def setup():
    global seed
    py5.size(*helpers.DIMENSOES.external, py5.P2D)
    py5.color_mode(py5.HSB, 360, 100, 100)
    py5.frame_rate(5)
    seed = int(py5.random(5000))


def padrao(
    n_seed: int, idx: int, max_largura: float, max_altura: float, margem: float = 0
):
    py5.noise_seed(n_seed)
    py5.no_stroke()
    py5.fill(0)
    py5.rect(margem, margem, max_largura - margem * 2, max_altura - margem * 2)
    f = idx
    x = margem
    cor_base = 50
    while x < max_largura - margem:
        y = margem
        idy = 0
        while y < max_altura - margem:
            buffer = 0
            h_base = cor_base
            if idy % 2:
                h_base = cor_base * 2
                buffer = passo * 0.5
            h = max(
                passo
                * py5.noise(
                    x * multiplicador, (y + f) * multiplicador, f * multiplicador
                ),
                passo * 0.1,
            )
            b = py5.remap(h, 0, 10, 30, 100)
            cor = py5.color((h_base + h * 2) % 360, 100, b)
            py5.fill(cor)
            largura = min(passo, h)
            altura = (passo + h) / 3
            py5.ellipse(x + buffer, y, largura, altura)
            y += h
            idy += 1
        x += passo


def draw():
    py5.background(cor_fundo)
    with py5.push():
        py5.translate(*helpers.DIMENSOES.pos_interno)
        padrao(seed, py5.frame_count, *helpers.DIMENSOES.internal, margem=0)
    # Credits and go
    canvas.sketch_frame(
        sketch,
        cor_fundo,
        "large_transparent_white",
        "transparent_white",
        version=2,
    )


def key_pressed():
    key = py5.key
    if key == " ":
        save_and_close()


def save_and_close():
    py5.no_loop()
    canvas.save_sketch_image(sketch)
    py5.exit_sketch()


if __name__ == "__main__":
    py5.run_sketch()