SlideShare une entreprise Scribd logo
1  sur  21
Introdução à Programação Gráfica
com Processing
Aula 02 – Técnicas de Programação
Arrays
Arrays são listas de dados, utilizados para armazenar e manipular grandes
quantidades de dados do mesmo tipo de forma automatizada. Cada pedaço de
dados em um array é identificado por um número de índice que representa a
sua posição no array. Os índices começam pelo 0, o que significa que o primeiro
elemento do array é [0], o segundo elemento é [1], e assim por diante.
Arrays
Exemplo
int num[] = new int[10]; //declaração de um array de 10 inteiros
void setup() {
size(800, 600);
smooth();
background(255);
for (int i = 0; i < num.length; i++) { //laço para varrer o vetor
num[i] = i*10; //incializa o elemento do indice i com valores de 0 até 90
fill(num[i]); //0 até 90
stroke(255-num[i]); //255 até 165;
ellipse(50*i + 100, height/2, num[i], num[i]);
}
}
Arrays
Exemplo com múltiplos arrays: siga o mestre
int s = 100; //elementos no array
float v = 5; //velocidade das ellipses
int[] ds = new int[s]; //diametros
float[] xs = new float[s]; //posições x
float[] ys = new float[s]; //posições y
void setup () {
size(800, 600);
background(255);
smooth();
noStroke();
fill(0);
for (int i = 0; i < ds.length; i++) { //inicializa os elementos dos arrays
ds[i] = i; //inicializa os diametros com os valores dos indices
xs[i] = width/2; //incializa as posições x e y no centro da tela
ys[i] = height/2;
}
}
void draw() {
background(255);
if (keyPressed) { //recebe entradas do teclado
if (key == 'z') { //tecla z faz as bolas moverem-se mais rápido
v -= 0.1;
v = constrain(v, 1, 5); //limita os valores de v para no minimo 1
} // e no máximo 5
if (key == 'x') { //tecla x faz as bolas moverem-se mais devagar
v += 0.1;
v = constrain(v, 1, 5);
}
}
xs[0] = mouseX; //primeiros elementos de posição x e y recebem a posição
//do mouse
ys[0] = mouseY;
ellipse(xs[0], ys[0], ds[0], ds[0]);
for (int i = 1; i < ds.length; i++) { //cada elemento dos arrays de posição
//recebe um incremento em direção a posição do elemento anterior
xs[i] += (xs[i-1] - xs[i])/v;
ys[i] += (ys[i-1] - ys[i])/v;
ellipse(xs[i], ys[i], ds[i], ds[i]);
}
}
Arrays
Exemplo com múltiplos arrays: siga o mestre
Programação Orientada a Objetos
Conceito
A orientação a objetos é um paradigma de análise, projeto e programação
de sistemas de software baseada na composição e interação entre diversas
unidades de software chamadas de objetos.
Na programação orientada a objetos, implementa-se um conjunto de
classes que definem os objetos presentes no sistema de software. Cada
classe determina o comportamento (definido nos métodos) e estados
possíveis (atributos) de seus objetos, assim como o relacionamento com
outros objetos.
Programação Orientada a Objetos
Classes
Uma classe é uma representação abstrata de objetos com características
afins. A classe define o comportamento dos objetos através de seus
métodos, e quais estados ele é capaz de manter através de seus atributos.
Objetos/ Instâncias de classe
Uma classe pode criar várias instâncias de si mesma com diferentes valores
para seus atributos. Esses objetos que atuam efetivamente no sistema.
Programação Orientada a Objetos
Atributos
São características de um objeto.
Basicamente a estrutura de
dados que vai representar a
classe. São análogos às variáveis.
Métodos
Definem o comportamento dos
objetos. Um método em uma
classe é apenas uma definição. A
ação só ocorre quando o método
é invocado através do objeto.
Dentro do programa, a utilização
de um método deve afetar
apenas um objeto em particular.
Normalmente, uma classe possui
diversos métodos. São análogos
às funções.
Programação Orientada a Objetos
Exemplo
comparativo:
Programação Orientada a Objetos
Exemplo carro orientado a objeto:
Car myCar; //criação do objeto
void setup() {
size(300,200);
myCar = new Car(); //instanciação
}
void draw() {
background(255);
myCar.drive(); //chamada de métodos
myCar.display();
}
class Car{
color c ; //atributos
float x ;
float y ;
float speed ;
Car(){ //construtor
c = color(0);
x = width/2;
y = height/2;
speed = 1;
}
void drive() { //método
x = x + speed;
if (x > width) {
x = 0;
}
}
void display() {
fill(c);
rect(x,y,30,10);
}
}
Programação Orientada a Objetos
Método construtor
O método construtor é chamado quando um objeto é instanciado, inicializando os seus
atributos. Através dele é possível inicializar os atributos com diferentes valores em cada
instanciação através do comando new. O construtor não tem retorno.
Programação Orientada a Objetos
Exemplo carro com construtor:
Car myCar; //criação do objeto
void setup() {
size(300,200);
myCar = new Car(color(255,0,0),0,50,5);
//instanciação
}
void draw() {
background(255);
myCar.drive(); //chamada de métodos
myCar.display();
}
class Car{
color c ;
float x ;
float y ;
float speed ;
Car(color col, float ex, float why, float s){
c = col;
x = ex;
y = why;
speed = s;
}
void drive() {
x = x + speed;
if (x > width) {
x = 0;
}
}
void display() {
fill(c);
rect(x,y,30,10);
}
}
Programação Orientada a Objetos
Exemplo com array de objetos:
Car [] myCars = new Car[200]; //criação de array de objetos
void setup() {
size(600,400);
noStroke();
for(int i = 0; i < myCars.length; i++){
myCars[i] = new Car(color(random(255), random(255)),
random(width), random(height), random(1,3));
}
}
void draw() {
background(255);
for(int i = 0; i < myCars.length; i++){
myCars[i].drive(); //chamada de métodos
myCars[i].display();
}
}
class Car{
color c ;
float x ;
float y ;
float speed ;
Car(color col, float ex, float why, float s){
c = col;
x = ex;
y = why;
speed = s;
}
void drive() {
x = x + speed;
if (x > width) {
x = 0;
}
}
void display() {
fill(c);
rect(x,y,30,10);
}
}
Programação Orientada a Objetos
Exemplo com array de objetos:
Complexidade
Estudo de caso: movimento de particulas
Point[] ps = new Point[10];
void setup() {
size(800, 600);
smooth();
background(255);
for (int i = 0; i < ps.length; i++) {
ps[i] = new Point(width/2, height/2, 2, color(i),
cos(i),sin(i));
}
}
void draw() {
for (int i = 0; i < ps.length; i++) {
ps[i].display();
ps[i].update();
}
}
class Point {
float x, y;
float vx, vy;
float d;
float v;
color c;
Point(float ex, float why, float di, color col, float v1,
float v2) {
x = ex;
y = why;
d = di;
c = col;
vx = v1;
vy = v2;
}
void display() {
fill(c);
noStroke();
ellipse(x, y, d, d);
}
void update() {
x += vx;
y += vy;
if(x >= width || x <= 0){
vx *= -1;
}
if(y >= height || y <= 0){
vy *= -1;
}
}
}
Complexidade
A função random
Gera números aleatórios. Cada vez que a função random () é chamada, ela
retorna um valor inesperado dentro do intervalo especificado.
//Sintaxe//
random(high);
random(low, high);
Complexidade
Estudo de caso: movimento browniano
Point[] ps = new Point[1000];
float big_d = 200;
void setup() {
size(800, 600);
smooth();
background(255);
for (int i = 0; i < ps.length; i++) {
ps[i] = new Point(width/2, height/2, 1,
color(random(255)), random(5),random(5));
}
}
void draw() {
//background(255);
for (int i = 0; i < ps.length; i++) {
ps[i].display();
ps[i].update();
}
}
class Point {
float x, y;
float vx, vy;
float d;
float vxc,vyc;
color c;
Point(float ex, float why, float di, color col, float v1,
float v2) {
x = ex;
y = why;
d = di;
c = col;
vxc = v1;
vyc = v2;
vx = random(-1,1)*vxc;
vy = random(-1,1)*vyc;
}
void display() {
fill(c);
noStroke();
ellipse(x, y, d, d);
}
void update() {
x += vx;
y += vy;
vx = random(-1,1)*vxc;
vy = random(-1,1)*vyc;
}
}
Complexidade
Estudo de caso: movimento browniano
Complexidade
Estudo de caso: conexões de
partículas
Point[] ps = new Point[50];
float big_d = 200;
void setup() {
size(800, 600);
smooth();
background(255);
for (int i = 0; i < ps.length; i++) {
ps[i] = new Point(random(width),
random(height), 20, color(0),
random(-1, 1)*2, random(-1, 1)*2,
50);
}
}
void draw() {
background(255);
for (int i = 0; i < ps.length; i++) {
ps[i].display();
ps[i].update();
}
}
class Point {
float x, y;
float vx, vy;
float d;
color c;
float rad;
Point(float ex, float why, float di,
color col, float v1, float v2, float cr) {
x = ex;
y = why;
d = di;
c = col;
vx = v1;
vy = v2;
rad = cr;
}
void display() {
fill(c);
noStroke();
ellipse(x, y, d, d);
stroke(0);
strokeWeight(3);
traceLines();
}
void update() {
x += vx;
y += vy;
if (x >= width || x <= 0) {
vx *= -1;
}
if (y >= height || y <= 0) {
vy *= -1;
}
}
void traceLines() {
for (int i = 0; i < ps.length; i++) {
//percorre um array de partículas,
testando se elas se tocam
float distance = dist(x, y, ps[i].x,
ps[i].y);
//se a soma dos raios de duas
partículas for maior que a distancia
entre seus centros, elas se tocam
if (ps[i].rad + rad >= distance) {
line(x, y, ps[i].x, ps[i].y);
}
}
}
}
Complexidade
Estudo de caso: conexões de partículas
Bibliotecas
Estendem Processing para além de gráficos e imagens, permitindo trabalhar com
áudio, vídeo e comunicação com outros dispositivos. As seguintes bibliotecas
estão incluídas com o software de Processing. Para incluir uma biblioteca,
selecione o nome dela através da opção “Import Library“ no menu Sketch. Essas
bibliotecas são de código aberto; o código é distribuído com o Processing.
Video
Lê imagens de uma camera, reproduz e cria arquivos de filme.
DXF Export
Cria arquivos DXF para exportar geometrias para outros programas. Funciona com gráficos
baseados em triângulos, incluindo polígonos, caixas e esferas.
Serial
Envia dados entre Processing e um hardware externo através da comunicação serial (RS-
232).
PDF Export
Cria arquivos PDF vetorizados, que podem ser escalados para qualquer tamanho e
impressos em alta resolução.
Network
Envia e recebe dados pela Internet através de clientes e servidores.
Minim
Usa JavaSound para provir uma biblioteca de áudio de fácil uso, ao mesmo tempo que
permite flexibilidade para usuários avançados.

Contenu connexe

Tendances

14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelasRicardo Bolanho
 
Algoritmos Lista 1 de exercícios gabarito
Algoritmos Lista 1 de exercícios gabaritoAlgoritmos Lista 1 de exercícios gabarito
Algoritmos Lista 1 de exercícios gabaritoRicardo Sonaglio Albano
 
Conexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das GaláxiasConexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das GaláxiasMaurício Aniche
 
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Introdução às Funções
 www.AulasDeMatematicanoRJ.Com.Br  - Matemática -  Introdução às Funções www.AulasDeMatematicanoRJ.Com.Br  - Matemática -  Introdução às Funções
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Introdução às FunçõesClarice Leclaire
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
Trabalho informatica educativa2 mary
Trabalho informatica educativa2 maryTrabalho informatica educativa2 mary
Trabalho informatica educativa2 maryjosiasjulio
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Elaine Cecília Gatto
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Minicurso de estatística experimental com o R - III SIC IFNMG
Minicurso de estatística experimental com o R  - III SIC IFNMGMinicurso de estatística experimental com o R  - III SIC IFNMG
Minicurso de estatística experimental com o R - III SIC IFNMGPetronio Candido
 
Capitulo 1scilab
Capitulo 1scilabCapitulo 1scilab
Capitulo 1scilabwjunior
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 

Tendances (20)

Aula 5 algoritimos(continuacao)
Aula 5   algoritimos(continuacao)Aula 5   algoritimos(continuacao)
Aula 5 algoritimos(continuacao)
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Algoritmos Lista 1 de exercícios gabarito
Algoritmos Lista 1 de exercícios gabaritoAlgoritmos Lista 1 de exercícios gabarito
Algoritmos Lista 1 de exercícios gabarito
 
Conexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das GaláxiasConexão Java 2012 - Orientação a Objetos das Galáxias
Conexão Java 2012 - Orientação a Objetos das Galáxias
 
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Introdução às Funções
 www.AulasDeMatematicanoRJ.Com.Br  - Matemática -  Introdução às Funções www.AulasDeMatematicanoRJ.Com.Br  - Matemática -  Introdução às Funções
www.AulasDeMatematicanoRJ.Com.Br - Matemática - Introdução às Funções
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Tutorial R
Tutorial RTutorial R
Tutorial R
 
Trabalho informatica educativa2 mary
Trabalho informatica educativa2 maryTrabalho informatica educativa2 mary
Trabalho informatica educativa2 mary
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
Função quadrática
Função quadráticaFunção quadrática
Função quadrática
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Wx maxima comandos1
Wx maxima comandos1Wx maxima comandos1
Wx maxima comandos1
 
Minicurso de estatística experimental com o R - III SIC IFNMG
Minicurso de estatística experimental com o R  - III SIC IFNMGMinicurso de estatística experimental com o R  - III SIC IFNMG
Minicurso de estatística experimental com o R - III SIC IFNMG
 
MIPS 32 BITS
MIPS 32 BITSMIPS 32 BITS
MIPS 32 BITS
 
Utilizandoo winplot
Utilizandoo winplotUtilizandoo winplot
Utilizandoo winplot
 
Capitulo 1scilab
Capitulo 1scilabCapitulo 1scilab
Capitulo 1scilab
 
Orientacoes graphmatica
Orientacoes graphmaticaOrientacoes graphmatica
Orientacoes graphmatica
 
Palestra python
Palestra pythonPalestra python
Palestra python
 

En vedette

Computação Gráfica - Introdução
Computação Gráfica - IntroduçãoComputação Gráfica - Introdução
Computação Gráfica - IntroduçãoTony Alexander Hild
 
Computação Gráfica - Introdução
Computação Gráfica - IntroduçãoComputação Gráfica - Introdução
Computação Gráfica - IntroduçãoDaniel Soto
 
Programação Criativa com Processing
Programação Criativa com ProcessingProgramação Criativa com Processing
Programação Criativa com ProcessingLucas Cabral
 
Design e composição gráfica
Design e composição gráficaDesign e composição gráfica
Design e composição gráficaPedro Fidalgo
 
Computação Gráfica - Conceitos
Computação Gráfica - ConceitosComputação Gráfica - Conceitos
Computação Gráfica - ConceitosJefferson Estevam
 
Assistente de programação visual gráfica
Assistente de programação visual gráficaAssistente de programação visual gráfica
Assistente de programação visual gráficaDaniel Brandão
 
Apresentação Computação Gráfica TCM
Apresentação Computação Gráfica TCMApresentação Computação Gráfica TCM
Apresentação Computação Gráfica TCMGian Berbert Souza
 
Animação e computação gráfica
Animação e computação gráficaAnimação e computação gráfica
Animação e computação gráficaHélder Prando
 
Computação grafica
Computação graficaComputação grafica
Computação graficaLucas Castro
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioFabio Moura Pereira
 
Composição e Projeto Gráfico 2015 - Fundamentos básicos-do design-1/2
Composição e Projeto Gráfico 2015 - Fundamentos básicos-do design-1/2Composição e Projeto Gráfico 2015 - Fundamentos básicos-do design-1/2
Composição e Projeto Gráfico 2015 - Fundamentos básicos-do design-1/2Fábio Gonçalves
 

En vedette (14)

Computação Gráfica - Introdução
Computação Gráfica - IntroduçãoComputação Gráfica - Introdução
Computação Gráfica - Introdução
 
Computação Gráfica - Introdução
Computação Gráfica - IntroduçãoComputação Gráfica - Introdução
Computação Gráfica - Introdução
 
Programação Criativa com Processing
Programação Criativa com ProcessingProgramação Criativa com Processing
Programação Criativa com Processing
 
Design e composição gráfica
Design e composição gráficaDesign e composição gráfica
Design e composição gráfica
 
Interface grafica do usuario
Interface grafica do usuarioInterface grafica do usuario
Interface grafica do usuario
 
Computação gráfica i
Computação gráfica iComputação gráfica i
Computação gráfica i
 
Computação Gráfica - Conceitos
Computação Gráfica - ConceitosComputação Gráfica - Conceitos
Computação Gráfica - Conceitos
 
Assistente de programação visual gráfica
Assistente de programação visual gráficaAssistente de programação visual gráfica
Assistente de programação visual gráfica
 
Apresentação Computação Gráfica TCM
Apresentação Computação Gráfica TCMApresentação Computação Gráfica TCM
Apresentação Computação Gráfica TCM
 
Animação e computação gráfica
Animação e computação gráficaAnimação e computação gráfica
Animação e computação gráfica
 
Computação grafica
Computação graficaComputação grafica
Computação grafica
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do Usuário
 
Sensores de Posição
Sensores de PosiçãoSensores de Posição
Sensores de Posição
 
Composição e Projeto Gráfico 2015 - Fundamentos básicos-do design-1/2
Composição e Projeto Gráfico 2015 - Fundamentos básicos-do design-1/2Composição e Projeto Gráfico 2015 - Fundamentos básicos-do design-1/2
Composição e Projeto Gráfico 2015 - Fundamentos básicos-do design-1/2
 

Similaire à Introdução a programação gráfica com Processing - Aula 02

Similaire à Introdução a programação gráfica com Processing - Aula 02 (18)

Kmeans
KmeansKmeans
Kmeans
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basico
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
 
Insertion Sort Classe Java
Insertion Sort Classe JavaInsertion Sort Classe Java
Insertion Sort Classe Java
 
8. matrizes
8. matrizes8. matrizes
8. matrizes
 
Bubble Sort Classe Java
Bubble Sort Classe JavaBubble Sort Classe Java
Bubble Sort Classe Java
 
Java8
Java8Java8
Java8
 
Herança e_vetores.pdf_
 Herança e_vetores.pdf_ Herança e_vetores.pdf_
Herança e_vetores.pdf_
 
Metodos de ordenação em c#
Metodos de ordenação em c#Metodos de ordenação em c#
Metodos de ordenação em c#
 
Amem
AmemAmem
Amem
 
Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?Por que dizemos que Scala é uma linguagem funcional?
Por que dizemos que Scala é uma linguagem funcional?
 
Aula 2
Aula 2Aula 2
Aula 2
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
 
Aula_1.pptx
Aula_1.pptxAula_1.pptx
Aula_1.pptx
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em Python
 
Trabalho vetores
Trabalho vetoresTrabalho vetores
Trabalho vetores
 
Introdução a linguagem Swift
Introdução a linguagem SwiftIntrodução a linguagem Swift
Introdução a linguagem Swift
 
Aula 5
Aula 5 Aula 5
Aula 5
 

Plus de Lucas Cabral

Por que dados abertos?
Por que dados abertos?Por que dados abertos?
Por que dados abertos?Lucas Cabral
 
Minicurso Rede de Sensores Sem Fio com Xbee e Arduino - Introdução
Minicurso Rede de Sensores Sem Fio com Xbee e Arduino - IntroduçãoMinicurso Rede de Sensores Sem Fio com Xbee e Arduino - Introdução
Minicurso Rede de Sensores Sem Fio com Xbee e Arduino - IntroduçãoLucas Cabral
 
Arte Computacional
Arte ComputacionalArte Computacional
Arte ComputacionalLucas Cabral
 
Oficina de Robótica e Automação Casa de Vovó Dedé: Introdução
Oficina de Robótica e Automação Casa de Vovó Dedé: IntroduçãoOficina de Robótica e Automação Casa de Vovó Dedé: Introdução
Oficina de Robótica e Automação Casa de Vovó Dedé: IntroduçãoLucas Cabral
 
Cidades Inteligentes com Arduino (Arduino Day 2015 - Fortaleza)
Cidades Inteligentes com Arduino (Arduino Day 2015 - Fortaleza)Cidades Inteligentes com Arduino (Arduino Day 2015 - Fortaleza)
Cidades Inteligentes com Arduino (Arduino Day 2015 - Fortaleza)Lucas Cabral
 
Workshop Arduino SETi 2014
Workshop Arduino SETi 2014Workshop Arduino SETi 2014
Workshop Arduino SETi 2014Lucas Cabral
 
Projetos Interativos com Arduino
Projetos Interativos com ArduinoProjetos Interativos com Arduino
Projetos Interativos com ArduinoLucas Cabral
 

Plus de Lucas Cabral (8)

Por que dados abertos?
Por que dados abertos?Por que dados abertos?
Por que dados abertos?
 
Creative Coding
Creative CodingCreative Coding
Creative Coding
 
Minicurso Rede de Sensores Sem Fio com Xbee e Arduino - Introdução
Minicurso Rede de Sensores Sem Fio com Xbee e Arduino - IntroduçãoMinicurso Rede de Sensores Sem Fio com Xbee e Arduino - Introdução
Minicurso Rede de Sensores Sem Fio com Xbee e Arduino - Introdução
 
Arte Computacional
Arte ComputacionalArte Computacional
Arte Computacional
 
Oficina de Robótica e Automação Casa de Vovó Dedé: Introdução
Oficina de Robótica e Automação Casa de Vovó Dedé: IntroduçãoOficina de Robótica e Automação Casa de Vovó Dedé: Introdução
Oficina de Robótica e Automação Casa de Vovó Dedé: Introdução
 
Cidades Inteligentes com Arduino (Arduino Day 2015 - Fortaleza)
Cidades Inteligentes com Arduino (Arduino Day 2015 - Fortaleza)Cidades Inteligentes com Arduino (Arduino Day 2015 - Fortaleza)
Cidades Inteligentes com Arduino (Arduino Day 2015 - Fortaleza)
 
Workshop Arduino SETi 2014
Workshop Arduino SETi 2014Workshop Arduino SETi 2014
Workshop Arduino SETi 2014
 
Projetos Interativos com Arduino
Projetos Interativos com ArduinoProjetos Interativos com Arduino
Projetos Interativos com Arduino
 

Introdução a programação gráfica com Processing - Aula 02

  • 1. Introdução à Programação Gráfica com Processing Aula 02 – Técnicas de Programação
  • 2. Arrays Arrays são listas de dados, utilizados para armazenar e manipular grandes quantidades de dados do mesmo tipo de forma automatizada. Cada pedaço de dados em um array é identificado por um número de índice que representa a sua posição no array. Os índices começam pelo 0, o que significa que o primeiro elemento do array é [0], o segundo elemento é [1], e assim por diante.
  • 3. Arrays Exemplo int num[] = new int[10]; //declaração de um array de 10 inteiros void setup() { size(800, 600); smooth(); background(255); for (int i = 0; i < num.length; i++) { //laço para varrer o vetor num[i] = i*10; //incializa o elemento do indice i com valores de 0 até 90 fill(num[i]); //0 até 90 stroke(255-num[i]); //255 até 165; ellipse(50*i + 100, height/2, num[i], num[i]); } }
  • 4. Arrays Exemplo com múltiplos arrays: siga o mestre int s = 100; //elementos no array float v = 5; //velocidade das ellipses int[] ds = new int[s]; //diametros float[] xs = new float[s]; //posições x float[] ys = new float[s]; //posições y void setup () { size(800, 600); background(255); smooth(); noStroke(); fill(0); for (int i = 0; i < ds.length; i++) { //inicializa os elementos dos arrays ds[i] = i; //inicializa os diametros com os valores dos indices xs[i] = width/2; //incializa as posições x e y no centro da tela ys[i] = height/2; } } void draw() { background(255); if (keyPressed) { //recebe entradas do teclado if (key == 'z') { //tecla z faz as bolas moverem-se mais rápido v -= 0.1; v = constrain(v, 1, 5); //limita os valores de v para no minimo 1 } // e no máximo 5 if (key == 'x') { //tecla x faz as bolas moverem-se mais devagar v += 0.1; v = constrain(v, 1, 5); } } xs[0] = mouseX; //primeiros elementos de posição x e y recebem a posição //do mouse ys[0] = mouseY; ellipse(xs[0], ys[0], ds[0], ds[0]); for (int i = 1; i < ds.length; i++) { //cada elemento dos arrays de posição //recebe um incremento em direção a posição do elemento anterior xs[i] += (xs[i-1] - xs[i])/v; ys[i] += (ys[i-1] - ys[i])/v; ellipse(xs[i], ys[i], ds[i], ds[i]); } }
  • 5. Arrays Exemplo com múltiplos arrays: siga o mestre
  • 6. Programação Orientada a Objetos Conceito A orientação a objetos é um paradigma de análise, projeto e programação de sistemas de software baseada na composição e interação entre diversas unidades de software chamadas de objetos. Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.
  • 7. Programação Orientada a Objetos Classes Uma classe é uma representação abstrata de objetos com características afins. A classe define o comportamento dos objetos através de seus métodos, e quais estados ele é capaz de manter através de seus atributos. Objetos/ Instâncias de classe Uma classe pode criar várias instâncias de si mesma com diferentes valores para seus atributos. Esses objetos que atuam efetivamente no sistema.
  • 8. Programação Orientada a Objetos Atributos São características de um objeto. Basicamente a estrutura de dados que vai representar a classe. São análogos às variáveis. Métodos Definem o comportamento dos objetos. Um método em uma classe é apenas uma definição. A ação só ocorre quando o método é invocado através do objeto. Dentro do programa, a utilização de um método deve afetar apenas um objeto em particular. Normalmente, uma classe possui diversos métodos. São análogos às funções.
  • 9. Programação Orientada a Objetos Exemplo comparativo:
  • 10. Programação Orientada a Objetos Exemplo carro orientado a objeto: Car myCar; //criação do objeto void setup() { size(300,200); myCar = new Car(); //instanciação } void draw() { background(255); myCar.drive(); //chamada de métodos myCar.display(); } class Car{ color c ; //atributos float x ; float y ; float speed ; Car(){ //construtor c = color(0); x = width/2; y = height/2; speed = 1; } void drive() { //método x = x + speed; if (x > width) { x = 0; } } void display() { fill(c); rect(x,y,30,10); } }
  • 11. Programação Orientada a Objetos Método construtor O método construtor é chamado quando um objeto é instanciado, inicializando os seus atributos. Através dele é possível inicializar os atributos com diferentes valores em cada instanciação através do comando new. O construtor não tem retorno.
  • 12. Programação Orientada a Objetos Exemplo carro com construtor: Car myCar; //criação do objeto void setup() { size(300,200); myCar = new Car(color(255,0,0),0,50,5); //instanciação } void draw() { background(255); myCar.drive(); //chamada de métodos myCar.display(); } class Car{ color c ; float x ; float y ; float speed ; Car(color col, float ex, float why, float s){ c = col; x = ex; y = why; speed = s; } void drive() { x = x + speed; if (x > width) { x = 0; } } void display() { fill(c); rect(x,y,30,10); } }
  • 13. Programação Orientada a Objetos Exemplo com array de objetos: Car [] myCars = new Car[200]; //criação de array de objetos void setup() { size(600,400); noStroke(); for(int i = 0; i < myCars.length; i++){ myCars[i] = new Car(color(random(255), random(255)), random(width), random(height), random(1,3)); } } void draw() { background(255); for(int i = 0; i < myCars.length; i++){ myCars[i].drive(); //chamada de métodos myCars[i].display(); } } class Car{ color c ; float x ; float y ; float speed ; Car(color col, float ex, float why, float s){ c = col; x = ex; y = why; speed = s; } void drive() { x = x + speed; if (x > width) { x = 0; } } void display() { fill(c); rect(x,y,30,10); } }
  • 14. Programação Orientada a Objetos Exemplo com array de objetos:
  • 15. Complexidade Estudo de caso: movimento de particulas Point[] ps = new Point[10]; void setup() { size(800, 600); smooth(); background(255); for (int i = 0; i < ps.length; i++) { ps[i] = new Point(width/2, height/2, 2, color(i), cos(i),sin(i)); } } void draw() { for (int i = 0; i < ps.length; i++) { ps[i].display(); ps[i].update(); } } class Point { float x, y; float vx, vy; float d; float v; color c; Point(float ex, float why, float di, color col, float v1, float v2) { x = ex; y = why; d = di; c = col; vx = v1; vy = v2; } void display() { fill(c); noStroke(); ellipse(x, y, d, d); } void update() { x += vx; y += vy; if(x >= width || x <= 0){ vx *= -1; } if(y >= height || y <= 0){ vy *= -1; } } }
  • 16. Complexidade A função random Gera números aleatórios. Cada vez que a função random () é chamada, ela retorna um valor inesperado dentro do intervalo especificado. //Sintaxe// random(high); random(low, high);
  • 17. Complexidade Estudo de caso: movimento browniano Point[] ps = new Point[1000]; float big_d = 200; void setup() { size(800, 600); smooth(); background(255); for (int i = 0; i < ps.length; i++) { ps[i] = new Point(width/2, height/2, 1, color(random(255)), random(5),random(5)); } } void draw() { //background(255); for (int i = 0; i < ps.length; i++) { ps[i].display(); ps[i].update(); } } class Point { float x, y; float vx, vy; float d; float vxc,vyc; color c; Point(float ex, float why, float di, color col, float v1, float v2) { x = ex; y = why; d = di; c = col; vxc = v1; vyc = v2; vx = random(-1,1)*vxc; vy = random(-1,1)*vyc; } void display() { fill(c); noStroke(); ellipse(x, y, d, d); } void update() { x += vx; y += vy; vx = random(-1,1)*vxc; vy = random(-1,1)*vyc; } }
  • 18. Complexidade Estudo de caso: movimento browniano
  • 19. Complexidade Estudo de caso: conexões de partículas Point[] ps = new Point[50]; float big_d = 200; void setup() { size(800, 600); smooth(); background(255); for (int i = 0; i < ps.length; i++) { ps[i] = new Point(random(width), random(height), 20, color(0), random(-1, 1)*2, random(-1, 1)*2, 50); } } void draw() { background(255); for (int i = 0; i < ps.length; i++) { ps[i].display(); ps[i].update(); } } class Point { float x, y; float vx, vy; float d; color c; float rad; Point(float ex, float why, float di, color col, float v1, float v2, float cr) { x = ex; y = why; d = di; c = col; vx = v1; vy = v2; rad = cr; } void display() { fill(c); noStroke(); ellipse(x, y, d, d); stroke(0); strokeWeight(3); traceLines(); } void update() { x += vx; y += vy; if (x >= width || x <= 0) { vx *= -1; } if (y >= height || y <= 0) { vy *= -1; } } void traceLines() { for (int i = 0; i < ps.length; i++) { //percorre um array de partículas, testando se elas se tocam float distance = dist(x, y, ps[i].x, ps[i].y); //se a soma dos raios de duas partículas for maior que a distancia entre seus centros, elas se tocam if (ps[i].rad + rad >= distance) { line(x, y, ps[i].x, ps[i].y); } } } }
  • 20. Complexidade Estudo de caso: conexões de partículas
  • 21. Bibliotecas Estendem Processing para além de gráficos e imagens, permitindo trabalhar com áudio, vídeo e comunicação com outros dispositivos. As seguintes bibliotecas estão incluídas com o software de Processing. Para incluir uma biblioteca, selecione o nome dela através da opção “Import Library“ no menu Sketch. Essas bibliotecas são de código aberto; o código é distribuído com o Processing. Video Lê imagens de uma camera, reproduz e cria arquivos de filme. DXF Export Cria arquivos DXF para exportar geometrias para outros programas. Funciona com gráficos baseados em triângulos, incluindo polígonos, caixas e esferas. Serial Envia dados entre Processing e um hardware externo através da comunicação serial (RS- 232). PDF Export Cria arquivos PDF vetorizados, que podem ser escalados para qualquer tamanho e impressos em alta resolução. Network Envia e recebe dados pela Internet através de clientes e servidores. Minim Usa JavaSound para provir uma biblioteca de áudio de fácil uso, ao mesmo tempo que permite flexibilidade para usuários avançados.