segunda-feira, 1 de fevereiro de 2016
segunda-feira, 30 de novembro de 2015
MAMI Trabalho
A obra escolhida foi :
Jesús Rafael Soto , Répétition optique Nº 2 , 1951
1)Estudo de padrão
Após o reconhecimento do padrão foi necessário reconhecer as formas envolvidas e
suas relações para passar pro programa.
Depois criar uma disposição igual à obra.
2)Criação do código
a)Criar função do padrão.
b)Criar um método de repetição para preenchimento de qualquer tamanho de tela.
float lar = 30; //largura desejada
float alt = lar * 2; //altura em relação com largura
float x = 100; //posição x do primeiro padrão a ser criado
float y = 100; //posição y do primeiro padrão a ser criado
float xAt = x;
float yAt = y;
int cont = 0;
int cont2 = 1;
void setup()
{
size(800,600);
noStroke();
}
void padrao(float l , float h,float x ,float y) //padrão
{
fill(255);
quad(x , y , x+l , y , x+l , y+h , x , y+h);
fill(255,195,85);
quad(x , y , x+ l/2 ,y , x+l/2 , y + h/2 , x , y+h/2);
fill(44,37,39);
quad(x+l/2 , y + h/2 , x+l , y+h/2 , x+l , y+h , x+l/2 , y+h);
triangle(x , y , x + l/4 , y , x , y + h/2);
triangle(x + l/4 , y + h/2 , x + l/2 , y + h/2 , x + l/2 , y + h);
fill(255);
triangle(x + 3*l/4 , y+h/2, x+l , y+h/2 , x + l , y + h);
}
void draw()
{
if((xAt > -lar) && (cont == 0)) //criação da linha para a esquerda
{
padrao(lar,alt,xAt,yAt);
xAt = xAt - lar;
}
else
{
if(cont == 0)
{
cont = 1;
xAt = x;
}
}
if((xAt < width) && (cont == 1)) //criação da linha para a direita
{
padrao(lar,alt,xAt,yAt);
xAt = xAt + lar;
}
else
{
if (cont == 1) //alteração de colunas
{
cont = 0;
yAt = yAt + cont2 * alt;
xAt = x;
}
else
{
if(yAt > height) //inversão da criação de colunas
{
yAt = y;
xAt = x;
yAt = yAt - alt;
cont = 0;
cont2 = -cont2;
}
}
}
}
Resultado:
3)Aplicação
Estudo de linhas para criação de aplicações:
3.1) Retirando elementos conseguiu-se os seguintes resultados:
variação 1
variação 2
fill(255);
triangle(x , y , x + l/3 , y + h/2 , x , y + h/2);
triangle(x + l/3 , y , x + 2 * l/3 , y + h/2 , x + l/3 , y + h/2);
fill(0);
triangle(x + l/3 , y+h/2, x+2*l/3 , y+h/2 , x + 2*l/3 , y + h);
triangle(x + 2*l/3,y + h/2, x+l , y + h/2,x + l, y+h);
3.2)Utilização de cores randômicas criando texturas:
quad(x , y , x+l , y , x+l , y+h , x , y+h);
fill(random(0,255));
quad(x , y , x+ l/2 ,y , x+l/2 , y + h/2 , x , y+h/2);
fill(random(0,255));
quad(x+l/2 , y + h/2 , x+l , y+h/2 , x+l , y+h , x+l/2 , y+h);
triangle(x , y , x + l/4 , y , x , y + h/2);
triangle(x + l/4 , y + h/2 , x + l/2 , y + h/2 , x + l/2 , y + h);
fill(random(0,255));
triangle(x + 3*l/4 , y+h/2, x+l , y+h/2 , x + l , y + h);
3.3) Inspiração em obra física de Jesús Soto:
float lar = 10;
float alt = lar * 20;
float x = 100;
float y = 100;
float xAt = x;
float yAt = y;
int cont = 0;
int cont2 = 1;
void setup()
{
size(800,600);
noStroke();
}
void padrao(float l , float h,float x ,float y)
{
fill(0);
quad(x , y , x+l , y , x+l , y+h , x , y+h);
quad(x , y , x+ l/2 ,y , x+l/2 , y + h/2 , x , y+h/2);
quad(x+l/2 , y + h/2 , x+l , y+h/2 , x+l , y+h , x+l/2 , y+h);
fill(255);
triangle(x , y , x + l/6 , y , x , y + h/2);
triangle(x + l/6 , y + h/2 , x + l/2 , y + h/2 , x + l/2 , y + h);
triangle(x + 3*l/4 , y+h/2, x+l , y+h/2 , x + l , y + h);
}
Referências :
segunda-feira, 23 de novembro de 2015
MAMI Atividade 11
Função é um objeto de trabalho valioso nas mãos de bons programadores.Pode ser muitas vezes não ser necessária para a funcionalidade do código,mas ele fica desorganizado e extremamente mais extenso.O programador que usa função economiza tempo de trabalho além de deixar seu código mais didático.Facilita a alteração, caso seja preciso, e a percepção de objetos dentro do programa.
Um excelente exemplo para isso é o jogo Light-Bot que o jogador deve atribuir ao protagonista determinadas tarefas.Quando elas chegam a ficar repetitivas o jogo obriga o usuário a utilizar função e o que no começo seria estranho devido a saída da zona de conforto passa a ser bem mais prático e rápido.
Link do jogo:
http://www.clickjogos.com.br/Jogos-online/Puzzle/Light-Bot/
Um excelente exemplo para isso é o jogo Light-Bot que o jogador deve atribuir ao protagonista determinadas tarefas.Quando elas chegam a ficar repetitivas o jogo obriga o usuário a utilizar função e o que no começo seria estranho devido a saída da zona de conforto passa a ser bem mais prático e rápido.
Link do jogo:
http://www.clickjogos.com.br/Jogos-online/Puzzle/Light-Bot/
MAMI Atividade 10
O pong se resumiu a união de todos os ensinamentos até agora com a adição de movimentação pelo teclado. A utilização de funções foi fundamental para resumir o código e não torna-lo tão repetitivo.
- Primeiro devia-se criar os elementos que seriam um círculo e dois retângulos.
- Estabelecer os pontos de colisão.
- Criar as regras de colisões e os movimentos dos elementos e o que cada causaria.
Obs: use as teclas UP e DOWN (para o retângulo esquerdo) 5 e 2 ( para o retângulo direito)
Código:
float ex = 160;
float ey = 120;
int xRec1 = 280;
int yRec1 = 80;
int xRec2 = 20;
int yRec2 = 80;
float vx = -0.7;
float vy = -0.5;
void setup()
{
size(320,240);
background(0);
noStroke();
}
boolean Colisaoxa(float xp ,int x1 ,int x2)
{
if (( xp >= x1) && (xp <= x2))
{
println("Dentroxa");
return true;
}
else
{
println("Foraxa");
return false;
}
}
boolean Colisaoya(float yp ,int y1 ,int y2)
{
if (( yp >= y1) && (yp <= y2))
{
println("Dentroya");
return true;
}
else
{
println("Foraya");
return false;
}
}
boolean Colisaoxb(float xp ,int x1 ,int x2)
{
if (( xp >= x1) && (xp <= x2))
{
println("Dentroxb");
return true;
}
else
{
println("Foraxb");
return false;
}
}
boolean Colisaoyb(float yp ,int y1 ,int y2)
{
if (( yp >= y1) && (yp <= y2))
{
println("Dentroyb");
return true;
}
else
{
println("Forayb");
return false;
}
}
void draw()
{
background(0);
ellipse( ex , ey ,20,20);
rect(xRec1 , yRec1 , 20, 80);
rect(xRec2 , yRec2 , 20 , 80);
if( (Colisaoxa(ex , xRec1 - 10 ,xRec1 + 10)) && (Colisaoya(ey , yRec1 , yRec1 + 80)))
{
println("retorna");
vx = -vx;
}
if ((Colisaoxb(ex , xRec2 +10 ,xRec2 + 30)) && (Colisaoyb(ey , yRec2 , yRec2 + 80)))
{
println("retorna");
vx = -vx;
vx = vx + 0.5 * vx;
}
if ((ey <= 10) || (ey >= (height - 10)))
{
println("retorna");
vy = -vy;
vy = vy + 0.5 * vy;
}
ey = ey + vy;
ex = ex + vx;
}
void keyPressed()
{
if((keyCode == UP) && (yRec2 >= 10))
{
yRec2 = yRec2 - 5;
}
if((keyCode == DOWN) && (yRec2 <= 150))
{
yRec2 = yRec2 + 5;
}
if((key == '5') && (yRec1 >= 10))
{
yRec1 = yRec1 - 5;
}
if((key == '2') && (yRec1 <= 150))
{
yRec1 = yRec1 + 5;
}
}
- Primeiro devia-se criar os elementos que seriam um círculo e dois retângulos.
- Estabelecer os pontos de colisão.
- Criar as regras de colisões e os movimentos dos elementos e o que cada causaria.
Obs: use as teclas UP e DOWN (para o retângulo esquerdo) 5 e 2 ( para o retângulo direito)
Código:
float ex = 160;
float ey = 120;
int xRec1 = 280;
int yRec1 = 80;
int xRec2 = 20;
int yRec2 = 80;
float vx = -0.7;
float vy = -0.5;
void setup()
{
size(320,240);
background(0);
noStroke();
}
boolean Colisaoxa(float xp ,int x1 ,int x2)
{
if (( xp >= x1) && (xp <= x2))
{
println("Dentroxa");
return true;
}
else
{
println("Foraxa");
return false;
}
}
boolean Colisaoya(float yp ,int y1 ,int y2)
{
if (( yp >= y1) && (yp <= y2))
{
println("Dentroya");
return true;
}
else
{
println("Foraya");
return false;
}
}
boolean Colisaoxb(float xp ,int x1 ,int x2)
{
if (( xp >= x1) && (xp <= x2))
{
println("Dentroxb");
return true;
}
else
{
println("Foraxb");
return false;
}
}
boolean Colisaoyb(float yp ,int y1 ,int y2)
{
if (( yp >= y1) && (yp <= y2))
{
println("Dentroyb");
return true;
}
else
{
println("Forayb");
return false;
}
}
void draw()
{
background(0);
ellipse( ex , ey ,20,20);
rect(xRec1 , yRec1 , 20, 80);
rect(xRec2 , yRec2 , 20 , 80);
if( (Colisaoxa(ex , xRec1 - 10 ,xRec1 + 10)) && (Colisaoya(ey , yRec1 , yRec1 + 80)))
{
println("retorna");
vx = -vx;
}
if ((Colisaoxb(ex , xRec2 +10 ,xRec2 + 30)) && (Colisaoyb(ey , yRec2 , yRec2 + 80)))
{
println("retorna");
vx = -vx;
vx = vx + 0.5 * vx;
}
if ((ey <= 10) || (ey >= (height - 10)))
{
println("retorna");
vy = -vy;
vy = vy + 0.5 * vy;
}
ey = ey + vy;
ex = ex + vx;
}
void keyPressed()
{
if((keyCode == UP) && (yRec2 >= 10))
{
yRec2 = yRec2 - 5;
}
if((keyCode == DOWN) && (yRec2 <= 150))
{
yRec2 = yRec2 + 5;
}
if((key == '5') && (yRec1 >= 10))
{
yRec1 = yRec1 - 5;
}
if((key == '2') && (yRec1 <= 150))
{
yRec1 = yRec1 + 5;
}
}
MAMI Atividade 9
Primeiro precisa-se limitar até onde a bola chegará relacionando com o raio que está em constante mudança.Nesse limite invertemos as velocidades para ele ricochetear e adicionamos o aumento desejado.
Foi criado um limite para a alteração do raio da circunferência.
Código:
float xBola = 21;
float yBola = 300;
float Vx = 5;
float Vy = 5;
float R = 20;
float T = 0.1;
void setup()
{
size(800,600);
noStroke();
}
void draw()
{
background(125);
R = R + T;
if ((xBola >= width - R) || (xBola <= R))
{
Vx = Vx + 0.01 * Vx;
Vy = Vy + 0.01 * Vy;
Vx = Vx * -1;
}
if ((yBola >= height - R) || (yBola <= R))
{
Vx = Vx + 0.01 * Vx;
Vy = Vy + 0.01 * Vy;
Vy = Vy * -1;
}
fill(0);
ellipse(xBola,yBola,2*R,2*R);
if((R <= 10) || (R >= 40))
{
T = -T;
}
xBola = xBola + Vx;
yBola = yBola + Vy;
println(Vx,Vy);
}
Resultado:
Foi criado um limite para a alteração do raio da circunferência.
Código:
float xBola = 21;
float yBola = 300;
float Vx = 5;
float Vy = 5;
float R = 20;
float T = 0.1;
void setup()
{
size(800,600);
noStroke();
}
void draw()
{
background(125);
R = R + T;
if ((xBola >= width - R) || (xBola <= R))
{
Vx = Vx + 0.01 * Vx;
Vy = Vy + 0.01 * Vy;
Vx = Vx * -1;
}
if ((yBola >= height - R) || (yBola <= R))
{
Vx = Vx + 0.01 * Vx;
Vy = Vy + 0.01 * Vy;
Vy = Vy * -1;
}
fill(0);
ellipse(xBola,yBola,2*R,2*R);
if((R <= 10) || (R >= 40))
{
T = -T;
}
xBola = xBola + Vx;
yBola = yBola + Vy;
println(Vx,Vy);
}
Resultado:
MAMI Atividade 8
Para resolvermos o problema precisamos de usar o teorema de Pitágoras para saber a distância usamos então como demostrado abaixo:
Depois é só relacionar esses valores ao x,y do mouse com o x,y da circunferência.
Código:
float R1 = random(50,300);
float R2 = random(50,300);
float X1 = random(10,200);
float X2 = random(410,600);
float Y1 = random(100,500);
float Y2 = random(100,500);
void setup()
{
size(800,600);
noStroke();
}
void draw()
{
if ( (mouseX - X1)*(mouseX - X1) + (mouseY - Y1)*(mouseY - Y1) <= (R1 * R1))
{
fill(75);
}
else
{
fill(0);
}
ellipse(X1,Y1,2*R1,2*R1);
if ( (mouseX - X2)*(mouseX - X2) + (mouseY - Y2)*(mouseY - Y2) <= (R2 * R2))
{
fill(75);
}
else
{
fill(0);
}
ellipse(X2,Y2,2*R2,2*R2);
println(mouseX,mouseY);
}
Resultado:
MAMI Atividade 7
Escolhi o meu ponto de referencia como mostra na figura a sequir:
Então a partir dele foram marcadas as formas necessárias :
- 2 retângulos maiores
- 2 quadrados módulo x módulo
- 2 segmentos de circunferência
- 2 círculos menores
- 2 retângulos auxiliadores para ao se agregarem aos círculos criarem uma forma que deixasse visível só o necessário.
Código:
int H = 300;//altura//
int Soma = 5;//variação de tamanho//
float mod;//módulo//
float x ;
float y ;
void setup()
{
background(255);
size(800,600);
noStroke();
}
void draw()
{
background(255);
mod = H/7;
x = width / 2 - 1.5 * mod;//posição central em relação ao ponto de referencia//
y = height / 2 - 3 * mod;//posição central em relação ao ponto de referencia//
fill(0);
quad(x , y , x+ mod , y , x + mod , y + 7 * mod , x , y + 7 * mod);//retangulo maior esquerdo//
quad(x + 2 * mod, y , x+ 3 * mod , y , x + 3 * mod , y + 7 * mod , x + 2 * mod , y + 7 * mod);//retangulo maior direito//
quad(x + mod - 1 , y + 3.5* mod, x + 2 * mod + 1 , y + 3.5* mod , x + 2 * mod + 1 , y + 4.5 * mod , x + mod - 1, y + 4.5 * mod);//quadrado de baixo//
quad( x + mod - 1, y - mod, x + 2 * mod + 1 , y - mod , x + 2 * mod + 1 , y + 0.25 * mod , x + mod - 1 , y + 0.25 * mod);//quadrado de cima//
fill(255);
ellipse(x + 1.125 * mod , y + 0.125 * mod , 0.25 * mod , 0.25 * mod);//circulo pequeno esquerdo//
ellipse(x + 1.875 * mod , y + 0.125 * mod , 0.25 * mod , 0.25 * mod);//circulo pequeno direito//
fill(0);
arc(x + 2 * mod , y , 2 * mod , 2 * mod ,PI * 3/2, PI * 2 );//arco direito//
arc(x + mod , y , 2 * mod , 2 * mod , PI , PI * 3/2 );//arco esquerdo//
fill(255);
quad(x + 1.125 * mod , y , x + 1.875 * mod , y , x + 1.875 * mod , y + mod , x + 1.125 * mod , y + mod);//retangulo auxiliar 1//
quad(x + mod , y + 0.125 * mod , x + 2 * mod , y + 0.125 * mod , x + 2 * mod , y + mod , x + mod , y + mod);//retângulo auxiliar 2//
if ((H > 500) || ( H < 100))
{
Soma = Soma * -1;
}
H = H + Soma;
}
Resultado:
Assinar:
Postagens (Atom)






























