Escolar Documentos
Profissional Documentos
Cultura Documentos
Amílcar Cardoso
Universidade de Coimbra
http://www.dei.uc.pt/amilcar
amilcar@dei.uc.pt
© Amílcar Cardoso
Linha de Quadrados
int x = 50;
int l = 60;
int sp = 20;
void setup() {
size(660,400);
background(255);
rectMode(CENTER);
• Convenção:
void setup() {
size(660,400); void mousePressed() {
rectMode(CENTER); if (mouseY>((height-l)/2) && mouseY<((height+l)/2)
} {
if (mouseX>20 && mouseX<80) n = 0;
void draw() { if (mouseX>100 && mouseX<160) n = 1;
int x = 50; if (mouseX>180 && mouseX<240) n = 2;
background(255); if (mouseX>260 && mouseX<320) n = 3;
for (int i=0; i<8; i++) { if (mouseX>340 && mouseX<400) n = 4;
if (i==n) if (mouseX>420 && mouseX<480) n = 5;
fill(255,255,0); if (mouseX>500 && mouseX<560) n = 6;
else if (mouseX>580 && mouseX<640) n = 7;
fill(183,236,255); }
rect(x, height/2, l, l); }
x = x + l + sp;
}
}
© Amílcar Cardoso Programação Multimédia 6
Alternativa para “mousePressed”
void mousePressed() {
if (mouseY>((height-l)/2) && mouseY<((height+l)/2)
{
if (mouseX>20 && mouseX<80) n = 0;
if (mouseX>100 && mouseX<160) n = 1;
if (mouseX>180 && mouseX<240) n = 2;
if (mouseX>260 && mouseX<320) n = 3;
if (mouseX>340 && mouseX<400) n = 4;
if (mouseX>420 && mouseX<480) n = 5;
if (mouseX>500 && mouseX<560) n = 6;
if (mouseX>580 && mouseX<640) n = 7;
} void mousePressed() {
} if (mouseY>((height-l)/2) && mouseY<((height+l)/2)) {
int p = mouseX / (l+sp);
int q = mouseX % (l+sp);
if (q>sp) n = p;
if (q==0) n=p-1;
}
}
© Amílcar Cardoso Programação Multimédia 7
Linha de Quadrados que mudam de cor
• Elementos indexados por um índice que pode variar entre 0 e n-1, sendo
n a dimensão do array
Tipo de cada
elemento Array de... nome do array
• Outros exemplos:
• float[ ] anArrayOfFloats;
• boolean[ ] anArrayOfBooleans;
• char[ ] anArrayOfChars;
• PacMan[ ] anArrayOfPacMan;
// Declarar array
int[ ] umArray;
• Formas simplificadas:
• int[ ] intArray = {100, 200, 300, 400, 500, 600, 700, 800};
atributo do objeto
© Amílcar Cardoso Programação Multimédia 12
Operações simples sobre arrays
• Calcular somatório:
// Mostrar valores
for (int i = 0; i < values.length; i++ ) {
println(values[i]);
}
size(600,300);
background(0);
fill(0,255,0);
int origem = 10; // Calcular média dos valores do array
float soma = 0;
// Array com 300 valores inteiros for (int i = 0; i < values.length; i++ ) {
int[ ] values = new int[300]; soma = soma + values[i];
}
// Inicializar com valores aleatórios println("Média = " + soma/values.length);
for (int i = 0; i < values.length; i++ ) {
values[i] = (int) random(0,280); // Desenhar nível da média
} stroke(255,255,0);
line(0, origem +soma/values.length, width,
// Desenhar um retangulo de larg = 2 origem +soma/values.length);
// por cada elemento do array
for (int i = 0; i < values.length; i++ ) {
rect(i*2, origem, 2, values[i]);
}
© Amílcar Cardoso Programação Multimédia 15
Linha de Quadrados que mudam de cor
void draw() {
// Array com 10 valores inteiros
frameRate(1);
int[ ] y = new int[10];
// Array com 10 cores
// Mostrar circulo
color[ ] c = new color[10];
for (int i = 0; i < y.length; i++ ) {
int raio = 20;
fill(c[i]);
ellipse((i+1)*width/11, y[i], 2*raio, 2*raio);
void setup () {
}
size(500,200);
}
background(150,180,255);
void mousePressed() {
for (int i = 0; i < y.length; i++ ) {
// Inicializar com valores aleatórios
float d = dist(mouseX, mouseY, (i+1)*width/11,
for (int i = 0; i < y.length; i++ ) {
y[i]);
y[i] = (int) random(20,height-20);
if (d <= raio)
c[i] = color(0, 0, 255);
c[i] = color(255,255,0);
}
}
}
}
size(450,300);
background(0);
smooth();
stroke(255);
// Mostrar circulos
for (int i = 0; i < cinz.length; i++ ) {
fill(cinz[i]);
ellipse((i+1)*50, height/2, 30, 30);
}
© Amílcar Cardoso Programação Multimédia 20
Outro exemplo
void draw() {
// Array com 24 valores inteiros (ordenadas) frameRate(1);
int[ ] y = new int[24];
// Mostrar circulos
void setup () { fill(200,0,200);
size(500,200); for (int i = 0; i < y.length; i++ ) {
background(0); ellipse((i+1)*20, y[i], 18, 18);
}
// Inicializar com números aleatórios
for (int i = 0; i < y.length; i++ ) { // Sortear um e mudar a cor
y[i] = (int) random(9,200-9); int k = (int) random(24);
} fill(255,255,0);
} ellipse((k+1)*20, y[k], 18, 18);
}
// deslocar valores
int[] xpos = new int[100];
for (int i = 0; i < xpos.length-1; i++ ) {
int[] ypos = new int[100];
xpos[i] = xpos[i + 1];
ypos[i] = ypos[i + 1];
void setup() {
}
size(400,400);
smooth();
// Nova posicao
xpos[xpos.length-1] = mouseX;
// Inicializar arrays
ypos[ypos.length-1] = mouseY;
for (int i = 0; i < xpos.length; i++ ) {
xpos[i] = 0;
// Desenhar tudo
ypos[i] = 0;
for (int i = 0; i < xpos.length; i++ ) {
}
noStroke();
}
fill(255-i*2);
ellipse(xpos[i],ypos[i],i/2,i/2);
}
}
© Amílcar Cardoso Programação Multimédia 24
Arrays multidimensionais
• Acesso a elementos:
size(300,500);
// Preenche matriz
for (int i=0; i<60; i++)
for (int j=0; j<100; j++) {
cinzentos[i][j] = int(random(0,255));
}
// Desenha matriz
for (int i=0; i<60; i++)
for (int j=0; j<100; j++) {
fill(cinzentos[i][j]);
rect(i*5, j*5, 5, 5);
}
size(300,500);
// Preenche matriz
for (int i=0; i<60; i++)
for (int j=0; j<100; j++) {
matriz[i][j] = color(int(random(0,255)),
int(random(100,200)),0);
}
// Desenha matriz
for (int i=0; i<60; i++)
for (int j=0; j<100; j++) {
fill(matriz[i][j]);
rect(i*5, j*5, 5, 5);
}
void draw() {
color [][] matriz = new color [60][100]; frameRate(1);
int lazul = 0;
// Rendering da matriz
for (int i=0; i<60; i++)
void setup() {
for (int j=0; j<100; j++) {
size(300,500);
fill(matriz[i][j]);
rect(i*5, j*5, 5, 5);
// Preenche matriz
}
for (int i=0; i<60; i++)
for (int j=0; j<100; j++) {
// Linha a azul
matriz[i][j] = color(int(random(0,255)),
for (int i=0; i<60; i++)
int(random(100,200)),0);
matriz[i][lazul] = color(0,0,255);
}
}
if (lazul < 99) lazul++;
}
• grelha.length
• Número de linhas:
void draw(){
int nb=10; ellipseMode(CENTER);
int nb_max=20; fill (mouseY/2);
int [][] centros = new int [nb_max][2]; for(int i=0;i<nb;i++){
int [] raios = new int [nb_max]; ellipse(centros[i][0],centros[i][1],
raios[i], raios[i]);
void setup(){ }
size(500,500); }
background(255); void mousePressed(){
for (int i=0;i<nb;i++){ if (nb<nb_max){
centros[i][0]=int(random(0,500)); centros[nb][0]=mouseX;
centros[i][1]=int(random(0,500)); centros[nb][1]=mouseY;
raios[i]=int(random(50,100)); raios[nb]=int(random(50,100));
} nb++;
} }
}
© Amílcar Cardoso
Estruturas de Dados
• Estáticas:
• Exemplo: arrays
• Dinâmicas:
• Exemplo: arrayLists
lista.size()
lista.size()
• Criação:
Inicialmente vazia
• alternativa:
lista.size()
• Criação:
Inicialmente vazia
• Adicionar elemento:
• Notas:
lista a 2 c
lista.size()
• if (lista.contains(2)) (…)
a.add('a');
a.add('b');
a.add('c');
a.add('d');
a.add(2, 'e');
terminal:
a.add('f');
Conteúdo de a após adições: [a, b, e, c, d, f]
if (a.contains('z')) a.remove(a.indexOf('z'));
if (a.contains('d')) a.remove(a.indexOf('d'));
• lista1.addAll(pos, lista2);
lista1 b a t e m
lista1.addAll(2, lista2) b a l e v e t e m
• lista.clear( );
a1.add('a');
a1.add('b');
a1.add('c');
a1.add('d');
a2.add(1);
a2.add(2);
terminal:
(a)(b)(c)(d)
lista.size()
• Criação:
Inicialmente vazia
• alternativa:
Pos(int x, int y) {
this.x = x;
this.y = y;
}
(…)
}
Pos(int x, int y) {
this.x = x;
this.y = y;
}
alternativa
// adiciona duas posições
lista.add(new Pos(3,3));
lista.add(new Pos(0,1));
lista2:(0, 2) (0, 3)
• Resolver usando
lista de Pos( )
ArrayList p
reta i
reta i
void setup () {
size(500,500);
}
void draw() {
background(255);
// Desenhar retas número de retas
for (int i = 0; i < p.size()/2; i++ ) {
line((int)p.get(i*2).x, (int)p.get(i*2).y,
(int)p.get(i*2+1).x, (int)p.get(i*2+1).y);
}
// Desenhar pontos
fill(0); número de pontos
for (int i=0; i<p.size(); i++) void mousePressed() {
ellipse((int)p.get(i).x, (int)p.get(i).y, 5, 5); p.add(new Pos(mouseX,mouseY));
} }
(…)
// Posições iguais?
public boolean equals(Pos p) {
return (this.x==p.x) && (this.y==p.y);
}
• Porém…
• Porém… (…)
// Posições iguais?
public boolean equals(Pos p) {
return (this.x==p.x) && (this.y==p.y);
}
println(lista1.contains(new Pos(3,3)));
• Agora sim:
println(lista1.contains(new Pos(3,3)));