Waves II

2024-03-29

"""2024-03-29
Waves II
Série de ondas, em tons de azul, criadas com funções trigonométricas.
png
Sketch,py5,CreativeCoding,waves
"""

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 = 14
    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.2, 1.8, num=passos, endpoint=False)
    pesos = np.linspace(6, 3, 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 (
        (2, 0, -10, 0, 0),
        (4, -5, -15, 3, 3),
        (6, -5, -15, 6, 6),
        (8, -9, -18, 9, 9),
        (10, -12, -20, 12, 12),
    ):
        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()