Genuary 25 - 'I should try to recreate this with code'.

2024-01-25

"""2024-01-25
Genuary 25 - 'I should try to recreate this with code'.
Série de ondas, em tons de azul, criadas com funções trigonométricas.
png
Sketch,py5,CreativeCoding,genuary,genuary25
"""
import numpy as np
import py5

from utils import helpers

np.logspace
sketch = helpers.info_for_sketch(__file__, __doc__)

MARGEM = 100


def setup():
    py5.size(helpers.LARGURA, helpers.ALTURA, py5.P3D)
    py5.background(252, 249, 230)
    py5.color_mode(py5.HSB, 360, 100, 100)
    py5.rect_mode(py5.CORNERS)
    py5.stroke_weight(2)
    py5.no_fill()
    passos = 22
    h = 210
    lx = py5.width - MARGEM
    ly = py5.height - MARGEM
    x = np.linspace(MARGEM, lx, endpoint=False, num=lx - MARGEM)
    y = np.linspace(MARGEM, ly, endpoint=False, num=passos)
    multiplicadores = np.logspace(0.4, 1.6, num=passos, endpoint=False)
    pesos = np.linspace(4, 2, num=passos, endpoint=False)
    y = zip(y, multiplicadores, pesos)
    for yb, mult_b, peso in y:
        y0 = None
        x0 = MARGEM
        py5.stroke_weight(peso)
        s = py5.remap(mult_b, 0, 40, 60, 100)
        for x1 in x:
            xd = py5.remap(x1, 0, 800, -60, 60)
            mult = mult_b * py5.cos(py5.radians(xd))
            y1 = yb + (mult * (abs(py5.cos(py5.radians(x0 + (3 * yb))) * py5.sin(x1))))
            b = py5.remap(xd, -60, 60, 80, 60)
            py5.stroke(h, s, b)
            if y0 is None:
                y0 = y1
            py5.line(x0, y0, x1, y1)
            x0, y0 = x1, y1

    for peso, dxi, dyi, dxf, dyf in (
        (5, 0, -10, 0, 0),
        (3, -5, -15, 5, 5),
        (2, -10, -20, 10, 10),
        (1, -15, -25, 15, 15),
    ):
        py5.stroke_weight(peso)
        py5.stroke(h, s, b)
        py5.rect(MARGEM + dxi, MARGEM + dyi, lx + dxf, ly + dyf)
    helpers.write_legend(sketch=sketch, cor=py5.color(h, s, b))


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


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


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