Upload
lucas-cabral
View
311
Download
1
Embed Size (px)
DESCRIPTION
Segunda parte do curso de introdução ao Processing promovido pelo Laboratório de Experiência Digital da Universidade Federal do Ceará. Nessa aula são abordados princípios básicos do uso de arrays e programação orientada a objetos.
Citation preview
Arrays
Arrays são listas de dados, utilizados para armazenar e manipular grandesquantidades de dados do mesmo tipo de forma automatizada. Cada pedaço dedados em um array é identificado por um número de índice que representa asua posição no array. Os índices começam pelo 0, o que significa que o primeiroelemento do array é [0], o segundo elemento é [1], e assim por diante.
ArraysExemploint 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 vetornum[i] = i*10; //incializa o elemento do indice i com valores de 0 até 90fill(num[i]); //0 até 90stroke(255-num[i]); //255 até 165;ellipse(50*i + 100, height/2, num[i], num[i]);
}}
Arrays
Exemplo com múltiplos arrays: siga o mestreint s = 100; //elementos no arrayfloat v = 5; //velocidade das ellipses
int[] ds = new int[s]; //diametrosfloat[] xs = new float[s]; //posições xfloat[] 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 arraysds[i] = i; //inicializa os diametros com os valores dos indicesxs[i] = width/2; //incializa as posições x e y no centro da telays[i] = height/2;
}}
void draw() {background(255);
if (keyPressed) { //recebe entradas do tecladoif (key == 'z') { //tecla z faz as bolas moverem-se mais rápidov -= 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 devagarv += 0.1;v = constrain(v, 1, 5);
}}
xs[0] = mouseX; //primeiros elementos de posição x e y recebem a posição //do mouseys[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]);}
}
Programação Orientada a Objetos
ConceitoA orientação a objetos é um paradigma de análise, projeto e programaçãode sistemas de software baseada na composição e interação entre diversasunidades de software chamadas de objetos.
Na programação orientada a objetos, implementa-se um conjunto declasses que definem os objetos presentes no sistema de software. Cadaclasse determina o comportamento (definido nos métodos) e estadospossíveis (atributos) de seus objetos, assim como o relacionamento comoutros objetos.
Programação Orientada a Objetos
ClassesUma classe é uma representação abstrata de objetos com característicasafins. A classe define o comportamento dos objetos através de seusmétodos, e quais estados ele é capaz de manter através de seus atributos.
Objetos/ Instâncias de classeUma classe pode criar várias instâncias de si mesma com diferentes valorespara seus atributos. Esses objetos que atuam efetivamente no sistema.
Programação Orientada a Objetos
AtributosSão características de um objeto.Basicamente a estrutura dedados que vai representar aclasse. São análogos às variáveis.
MétodosDefinem o comportamento dosobjetos. Um método em umaclasse é apenas uma definição. Aação só ocorre quando o métodoé invocado através do objeto.Dentro do programa, a utilizaçãode um método deve afetarapenas um objeto em particular.Normalmente, uma classe possuidiversos métodos. São análogosàs funções.
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 ; //atributosfloat x ;float y ;float speed ;
Car(){ //construtorc = color(0);x = width/2;y = height/2;speed = 1;
}
void drive() { //métodox = x + speed;if (x > width) {x = 0;
}}
void display() {fill(c);rect(x,y,30,10);
}}
Programação Orientada a Objetos
Método construtorO método construtor é chamado quando um objeto é instanciado, inicializando os seusatributos. Através dele é possível inicializar os atributos com diferentes valores em cadainstanciaçã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);
}
}
ComplexidadeEstudo 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 randomGera 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);
ComplexidadeEstudo 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: 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);
}}
}}
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 bibliotecasestã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. Essasbibliotecas são de código aberto; o código é distribuído com o Processing.
VideoLê imagens de uma camera, reproduz e cria arquivos de filme.DXF ExportCria arquivos DXF para exportar geometrias para outros programas. Funciona com gráficosbaseados em triângulos, incluindo polígonos, caixas e esferas.SerialEnvia dados entre Processing e um hardware externo através da comunicação serial (RS-232).PDF ExportCria arquivos PDF vetorizados, que podem ser escalados para qualquer tamanho eimpressos em alta resolução.NetworkEnvia e recebe dados pela Internet através de clientes e servidores.MinimUsa JavaSound para provir uma biblioteca de áudio de fácil uso, ao mesmo tempo quepermite flexibilidade para usuários avançados.