Skip to content

Commit

Permalink
2 e 3
Browse files Browse the repository at this point in the history
  • Loading branch information
villares committed Nov 2, 2024
1 parent e6ff3b4 commit a77db18
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 15 deletions.
Binary file added Processing-Python-py5/assets/particulas2.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Processing-Python-py5/assets/particulas3.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 60 additions & 0 deletions Processing-Python-py5/estudos-para-exemplos/particulas2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from py5_tools import animated_gif


def setup():
""" Instancia três particulas """
global pa, pb, pc
size(100, 100) # área de desenho (width, height)
pa = Particula(50, 50, 40)
pb = Particula(80, 10, 30)
pc = Particula(10, 40, 20)
animated_gif('particulas2.gif', count=100, period=0.10, duration=0.10)


def draw():
""" Limpa a tela, desenha e atualiza particulas """
background(0) # atualização do desenho, fundo preto
pa.desenhar()
pa.atualizar()
pb.desenhar()
pb.atualizar()
pc.desenhar()
pc.atualizar()


class Particula():
""" Classe Particula, cor sorteada, velocidade sorteada """

def __init__(self, x, y, tamanho=None):
self.x = float(x)
self.y = float(y)
if tamanho:
self.tamanho = tamanho
else:
self.tamanho = random(50, 200)
self.vx = random(-1, 1)
self.vy = random(-1, 1)
self.cor = color(random(256), # R
random(256), # G
random(256), # B
200) # alpha

def desenhar(self):
""" Desenha círculo """
no_stroke()
fill(self.cor)
circle(self.x, self.y, self.tamanho)

def atualizar(self):
""" atualiza a posição do objeto e devolve do lado oposto se sair """
self.x += self.vx
self.y += self.vy
metade = self.tamanho / 2
if self.x > width + metade:
self.x = -metade
if self.y > height + metade:
self.y = -metade
if self.x < -metade:
self.x = width + metade
if self.y < -metade:
self.y = height + metade
57 changes: 57 additions & 0 deletions Processing-Python-py5/estudos-para-exemplos/particulas3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from py5_tools import animated_gif

particulas = [] # lista de objetos

def setup():
""" Define área de desenho e popula lista de particulas """
size(400, 400) # área de desenho (width, height)
meia_largura, meia_altura = width / 2, height / 2
for _ in range(50):
nova_particula = Particula(meia_largura, meia_altura)
particulas.append(nova_particula)
animated_gif('particulas3.gif', count=100, period=0.10, duration=0.10)



def draw():
""" Limpa a tela, desenha e atualiza particulas """
background(0) # atualização do desenho, fundo preto
for particula in particulas:
particula.desenhar()
particula.atualizar()
class Particula():
""" Classe Particula, cor sorteada, velocidade sorteada """

def __init__(self, x, y, tamanho=None):
self.x = float(x)
self.y = float(y)
if tamanho:
self.tamanho = tamanho
else:
self.tamanho = random(50, 200)
self.vx = random(-1, 1)
self.vy = random(-1, 1)
self.cor = color(random(256), # R
random(256), # G
random(256), # B
200) # alpha

def desenhar(self):
""" Desenha círculo """
no_stroke()
fill(self.cor)
circle(self.x, self.y, self.tamanho)

def atualizar(self):
""" atualiza a posição do objeto e devolve do lado oposto se sair """
self.x += self.vx
self.y += self.vy
metade = self.tamanho / 2
if self.x > width + metade:
self.x = -metade
if self.y > height + metade:
self.y = -metade
if self.x < -metade:
self.x = width + metade
if self.y < -metade:
self.y = height + metade
26 changes: 11 additions & 15 deletions Processing-Python-py5/particulas.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,9 @@ Prerequisitos para aproveitar melhor este material:

Para obter o efeito de movimento(animação de uma partícula) criaremos um par de variáveis globais `x` e `y`, que serão inicializadas no `setup()` com as coordenadas do meio da àrea de desenho. Note que o escopo global dessas variáveis precisa ser indicado com a palavra chave `global` quando pretendemos alterá-las.

O código que vai em `draw()` tem a execução repetida continuamente, é o "laço principal" do * sketch*. Neste bloco vamos inicialmente limpar a tela com `background()` e em seguida invocar a função de desenho `circle()` na posição indicada pelas variáveis `x` e `y`, atualizar as variáveis de posição e por fim checar se estas estão além de um certo limite e precisam ser redefinidas para um novo ciclo da animação.

<img src="assets/particuals0.gif" align="left" alt="um círculo animado">
<img src="assets/particulas0.gif" align="left" alt="um círculo animado">

O código que vai em `draw()` tem a execução repetida continuamente, é o "laço principal" do * sketch*. Neste bloco vamos inicialmente limpar a tela com `background()` e em seguida invocar a função de desenho `circle()` na posição indicada pelas variáveis `x` e `y`, atualizar as variáveis de posição e por fim checar se estas estão além de um certo limite e precisam ser redefinidas para um novo ciclo da animação.

```python
tamanho = 50
Expand Down Expand Up @@ -98,9 +97,9 @@ Pode parecer custosa demais toda essa buroracia para obter o mesmo comportamento

**Criando algumas partículas**

A vantagem da estruturação e encapsulamento de ter uma classe Particula pode começar a fazer sentido quando instanciamos mais de uma particula.
<img src="assets/particulas1.gif" align="left" alt="um círculo animado">

<img src="assets/particuals1.gif" align="left" alt="algumas partículas">
A vantagem da estruturação e encapsulamento de ter uma classe Particula pode começar a fazer sentido quando instanciamos mais de uma particula.

```python
def setup():
Expand All @@ -111,8 +110,6 @@ def setup():
pb = Particula(80, 10, 30)
pc = Particula(10, 40, 20)



def draw():
""" Limpa a tela, desenha e atualiza particulas """
background(0) # atualização do desenho, fundo preto
Expand All @@ -122,8 +119,6 @@ def draw():
pb.atualizar()
pc.desenhar()
pc.atualizar()


```
```
...o código continua com a classe Particula mostrada anteriormente
Expand All @@ -132,12 +127,14 @@ def draw():

**Mudando o comportamento e adicionando outras propriedades.**

<img src="assets/particulas2.gif" align="left" alt="um círculo animado">

O passo seguinte é dado ampliando o código da classe Particula.

No método `__init__()`:
1. Sorteio do tamanho, caso nenhum tenha sido fornecido na expressão construtora
1. Sorteio do tamanho, caso nenhum tenha sido fornecido quando o objeto é instanciado.
2. Sorteio da velocidade, decomposta nos componentes horizontal `self.vx` e vertical `self.vy`
3. Sorteio da cor, ligeiramente translúcida.
3. Sorteio da cor, ligeiramente translúcida.

No método `desenhar()`:
1. Remoção do contorno com `no_stroke()`
Expand Down Expand Up @@ -167,6 +164,7 @@ class Particula():

def desenhar(self):
""" Desenha círculo """
no_stroke()
fill(self.cor)
circle(self.x, self.y, self.tamanho)

Expand All @@ -189,13 +187,14 @@ class Particula():

**Uma lista de objetos**

<img src="assets/particulas3.gif" align="left" alt="um círculo animado">

Uma estrutura de dados, no caso uma lista, pode de maneira muito simples conter referências para um grande número de objetos.
Aqui chegamos rapidamente a um comportamento visualmente interessante instanciando 50 particulas no `setup()` e em seguida no `draw()` iteramos por estas particulas de maneira bastante típica em Python com um laço `for `*`object`*` in `*`collection_of_objects`*`: `

```python
particulas = [] # lista de objetos


def setup():
""" Define área de desenho e popula lista de particulas """
size(400, 400) # área de desenho (width, height)
Expand All @@ -204,15 +203,12 @@ def setup():
nova_particula = Particula(meia_largura, meia_altura)
particulas.append(nova_particula)


def draw():
""" Limpa a tela, desenha e atualiza particulas """
background(0) # atualização do desenho, fundo preto
for particula in particulas:
particula.desenhar()
particula.atualizar()


```

```
Expand Down

0 comments on commit a77db18

Please sign in to comment.