## Semana do Design ESPM # Oficina - Design Gerativo *um primeiro contato mão na massa com [Alexandre B A Villares](https://abav.lugaralgum.com)* Esta página está em -> hackmd.io/@villares/design-gerativo-espm ### gerativo/gerativa? - referências - [Max Bense, 1965 - Manifesto: *The Projects of Generative Aesthetics*](http://www.computerkunst.org/Bense_Manifest.pdf) <sub>(Meu motivo para evitar ~~generativo/generativa~~... Chomsky, no final da década de 50, cunha o termo gramática gerativa, [veja capa do livro de 1976 de Mário Perini](https://i.imgur.com/dD9TdLt.png), e temos a tradução do termo em Max Bense feita pela Monica Tavares e Julio Plaza, *Processos Criativos Com os Meios Eletrônicos: Poéticas Digitais*, 1998)</sub> - [Philip Galanter, 2003 - Artigo: *What is Generative Art?*](http://philipgalanter.com/downloads/ga2003_what_is_genart.pdf) - Sol LeWitt - [Casey Reas inspirado por LeWitt](https://whitney.org/exhibitions/software-structures) - Karstens Schmidt - [sdf](https://mastodon.thi.ng/@toxi/109970350719008499) / [sola tênis](https://i.imgur.com/1aawLUX.png) - Guilherme Vieira - [Estúdio Daó](https://www.instagram.com/_guilhermesv/) - Processing Community Day https://pcd2022.encontrosdigitais.com.br/sobre/ - **Ferramentas**: - Python + Processing ou p5js.org - **O que vamos usar: editor com Python no navegador [pyp5js-py5mode](http://abav.lugaralgum.com/pyp5js/py5mode/)** - Para instalar em casa: [Thonny IDE + py5](https://abav.lugaralgum.com/como-instalar-py5/) ([material de apoio](https://abav.lugaralgum.com/material-aulas)) - [Referência rápida do vocabulário do py5](https://github.com/villares/processing.py-cheat-sheet/blob/pt-br/py5/py5_cc.pdf) - [Outras ferramentas de desenho com Python](https://github.com/villares/Resources-for-teaching-programming#processing--python-tools-table) - **Roteiro preliminar "mão na massa"**: - Formas (coordenadas e dimensões) - Cores - Movimento e interação - Condicionais (if) - Aleatoriedade (random) - Encapsulamento (definindo novas funções) - Repetição - Mais repetição - Mais aleatoriedade - **Participantes** (escreva o seu nome): - Alexandre Villares - Lucas Frata Nogueira - Leandro Lorencini Calenzani - Luz Maria Vivas Passos - Gabriella Kazumi Maedo - Breno Inafuku - Erick Cruz - Beatriz Araújo - Andrew Cheng - Maria Vitoria de Oliveira - Naiara Almeida - Maria Manuela Matos - Flavia Muniz - Ana Carolina Novais - Gabriel Haddad Camargo de Amorim - Natália Valente - Leonardo Gonzalez Baldoni - Isabela Duarte - Letícia Harumi - Otávio Chaves - **SUGESTÕES:** - Nota sobre ordem de desenho e sobreposição no material de apoio (Gabriel) - Bola quicante com randomização da velocidade - Outros Feedbacks - A oficina foi bem divertida e informatica e o professor foi capaz de transmitir as infromações muito bem. - gostei da forma de explicação. eu também - Exemplos: ```python size(600, 600) # tamanha da área de desenho background(255, 150, 0) # cor de fundo e sobrepõe e apaga tudo stroke_weight(4) # espessura do traço fill(0, 0, 200) # cor de preenchimento das formas rect(100, 150, 150, 100) # x, y, largura, altura no_fill() # sem preenchimento square(170, 200, 100) # quadrado x, y, lado ``` Pincel aleatório ```python def setup(): size(600, 600) background(100, 255, 0) def draw(): r = random(255) # vermelho g = random(255) # green b = random(255) # azul d = random(10, 100) # diâmetro fill(r, g, b) if is_mouse_pressed: # se o mouse estiver pressionado circle(mouse_x, mouse_y, d) # desenha círculo # if is_key_pressed and key == ' ': # background(100, 255, 0) # Paleta de sorteio "enviesada" # g = random(128, 255) # green # b = random(0, 128) # azul # d = random(10, 100) # diâmetro ``` Animação 0 ```python x = 100 # variável global def setup(): size(600, 600) def draw(): global x # eu sei que x é global e eu vou querer mudar background(100, 255, 0) fill(x / 5, 100, 0) circle(x, 300, 10) x = x + 5 if x > 600: x = 0 ``` Bola quicante ```python x = 100 # variável global y = 200 vx = 5 vy = 1 def setup(): size(400, 400) def draw(): global x, vx, y, vy #background(100, 255, 0) fill(x / 5, 100, 0) circle(x, y, 10) x = x + vx y = y + vy if x > width or x < 0: vx = -vx if y > height or y < 0: vy = -vy ``` Grade - acumulação contínua ```python def setup(): size(400, 400) frame_rate(10) # deixa mais lento def draw(): espacamento = 50 # para cada y na faixa de números fabricado por range for y in range(50, 352, espacamento): # inicio, parada, passo # para cada x na faixa de números fabricado por range for x in range(50, 351, espacamento): # inicio, parada, passo tam = random (10, espacamento * 0.80) if random(100) > 50: fill(255) else: fill(0, 0, 200) circle(x, y, tam) ``` Grade 2 (fundo preto, redraw quando aperta uma tecla) ```python def setup(): size(400, 400) no_loop() def draw(): background(0) espacamento = 50 # para cada y na faixa de números fabricado por range for y in range(50, 352, espacamento): # inicio, parada, passo # para cada x na faixa de números fabricado por range for x in range(50, 351, espacamento): # inicio, parada, passo tam = random (10, espacamento * 0.80) if random(100) > 50: fill(255) else: fill(0, 0, 200) circle(x, y, tam) def key_pressed(): redraw() ```