Seja mais umnesse mundo tecnológico.
O mundo é high-tech.
Trabalhei como comunicador visual na comissão de comunicação do programa de aprendizagem cooperativa em células estudantis PACCE na propria UFC. Hoje sou editor de vídeos do Laboratório de Mídias Eletrônicas (LME), também vinculado a UFC.
Bem o jogo da vida muita gente conhece, agora fazer ele no processing não é nada tão simples assim quanto parece, para facilitar um pouco vamos fazer umas alterações para que facilite a nossas vidas. Essas hipoteses apenas estarão valendo para cada geração e cada trio de posições adjascentes:
Se houver somente duas células, ocorrerá nascimento;
Caso contrario, morte de célula.
E o código para que funcione com esse gráfico de linhas como mostrado acima, temos que fazer os seguintes códigos no processing:
Para tanto agora vamos brincar um pouco com imagens, e para isso tenha resultado satisfatório vamos pegar uma imagem aleatória para tratar o brilho no processing. Para isso pegamos a imagem do mario e do luigi para utilizarmos no processing. E faremos o seguinte código:
PImage imgOriginal;
float r,g,b;
float Bri;
float V = 0.01;
float a;
int pos;
void setup(){
size(320,240);
imgOriginal = loadImage("images2.jpg");
}
void draw(){
a = Bri+1;
loadPixels();
for(int x = 0; x < 320; x++){
for(int y = 0; y < 240; y++){
pos = y* 320 + x;
r = a*red(imgOriginal.pixels[pos]);
b = a*blue(imgOriginal.pixels[pos]);
g = a*green(imgOriginal.pixels[pos]);
pixels[pos]=color(r,g,b);
}
}
updatePixels();
if(Bri<-0 data-blogger-escaped-.5="" data-blogger-escaped-else="" data-blogger-escaped-if="" data-blogger-escaped-ri="" data-blogger-escaped-v="-V;">0.5){
V= -V;
}
Bri = Bri +V;
println(a);
}
Tendo como resultado imagens como essas:
Hoje vamos recriar um relógio digital utilizando algumas imagens que vamos recortar no photoshop e padronizar o tamanho para evitar possíveis transtornos. Os numerais usados foram esses:
E para que funcione usamos esse seguinte codigo utilizando as funções minute(), second(), hour(). Ficando assim:
PImage[] numeros = new PImage[10];
int i;
int y = 0;
void setup() {
for (i=0; i<=9; i++) {
numeros[i] = loadImage(i+".png");
}
size(300, 70);
}
void relogio() {
int s = second(); // Values from 0 - 59
int m = minute(); // Values from 0 - 59
int h = hour(); // Values from 0 - 23
image(numeros[s/10], 200, y);
image(numeros[s%10], 200+ numeros[s/10].width, y);
image(numeros[m/10], 100, y);
image(numeros[m%10], 100+numeros[m/10].width, y);
image(numeros[h/10], 0, y);
image(numeros[h%10], numeros[h/10].width, y);
}
void draw() {
background(204);
relogio();
}
Bem hoje iremos criar um desenho de um olho, mas esse olho irá seguir o cursor do mouse, sem sair do globo ocular é claro. E para isso usaremos algumas regrinhas de trigonometria, tais como coordenadas polares e tangentes.
Pois vamos para a codificação.
float x, y;
float angulo;
void setup() {
size (600, 600);
}
void olhoMovendo (float ang) {
fill (255);
ellipse (width/2, height/2, 300, 300);
fill (20);
ellipse (x, y, 100, 100);
float distancia = distancia2D (width/2, height/2, mouseX, mouseY);
if (distancia > 74) {
x = (74 * cos(angulo)) + width/2;
y = (74 * sin(angulo)) + height/2;
} else {
x = mouseX;
y = mouseY;
}
}
float distancia2D(float dx1, float dy1, float dx2, float dy2) {
int aux = (int) sqrt((dx2-dx1)*(dx2-dx1)+(dy2-dy1)*(dy2-dy1));
int retorna = (int) sqrt(aux*aux);
return retorna;
}
float limite(float x, float y) {
if (mouseX != 0) {
angulo = y/x;
}
angulo = atan(angulo);
if (x < 0) {
angulo = PI + angulo;
}
if (y <= 0 && x >= 0) {
angulo = 2*PI + angulo;
}
return angulo;
}
void draw() {
background (255);
float tang = limite (mouseX - width/2, mouseY-height/2);
olhoMovendo (tang);
}
Utilizando-se da trigonometria, podemos criar um relogio em tempo real. Usaremos para tal fim a lei dos cossenos, já usamos os senos, agora é a vez dos cossenos.
Falemos de trigonometria, e ainda por cima falaremos hoje de senos. Então vamos explicar como funciona os senos. A relação é valida para triângulos retângulos (como o nome sugere, ela veio a partir de um retângulo e possui um angulo reto 90º)
Mostremos aqui um exemplo:
Esse triângulo: SEN B = b/a;
SEN C = c/a;
SEN A = 1;
E a lei dos senos representada na figura abaixo:
E os resultados de um seno, sempre quando se coloca em gráfico, ele segue uma onda, devido ao arco trigonométrico. Como mostra a figura a seguir:
Agora você se pergunta aonde eu vou chegar com isso, e é aí que vou mostrar um codigo que você pode criar a partir dessas funções do seno.
A brincadeira simples de desenhar polígonos nas épocas de escola agora tem um nível a mais. Agora tem que refazer aqueles desenhos no caderno no computador vide programação. Pois vamos ao processing e desenhar um polígono qualquer mediante a uma função simples que retorne vértices para criar um polígono qualquer. Vamos ao código:
void setup() {
size(500,500);
}
void poligonR(float x, float y, float raio, int n) {
noFill();
float ang = 2*PI / n;
beginShape();
for (float f = 0; f < 2*PI; f += ang) {
float Vx = x + cos(f) * raio;
float Vy = y + sin(f) * raio;
vertex(Vx, Vy);
}
endShape(CLOSE);
}
void draw() {
background(102);
poligonR(width/2, height/2, 100, 3);
}
Bem voltamos aqui a falar sobre a logo do FourSquare, mas desta vez será um pouco diferente, trataremos do mesmo assunto passado, porem agora em um vídeo.
O vídeo encontra-se logo abaixo, então vocês poderão compreender melhor como foi feito o processo.
Nota: o áudio não me ajudou muito devido ao microfone usado não ser muito bom.
Bem hoje vamos dar uma estudada a respeito da nova logo do Foursquare (manual de identidade visual da marca), um serviço muito famoso que faz algo muito “importante” para nossas vidas, dizer para o mundo onde estamos e o que estamos fazendo, mas isso não vem ao caso.
Vamos ver observar se o retângulo áureo (ou retângulo de ouro) está presente no logo, ou não. E caso ele não esteja, vamos fazer algumas alterações para ver como ficaria se ele respeitasse essa ideia de perfeição adotada por muitos designers. Para quem não sabe o que é o retângulo áureo, vale a pena ver esse vídeo aqui:
Agora que já viu o vídeo voltamos ao assunto em questão.
Será que o Foursquare tem algum retângulo áureo?
Veremos aqui pela divisão de largura/altura, caso essa divisão alcançar o resultado 1,618 ou próximo desse teremos o retângulo.
Comecemos pelo conjunto da obra, olhando o ‘F’ desenhado da logo vamos ver se ele é um retângulo áureo.
Bem pelo que vimos na imagem o retângulo formado não é o áureo e ainda está longe dele, basta ver que a divisão feita obteve o resultado de 1,390 que é diferente de 1,618.
E nos outros testes ele também não alcança.
Então vamos tentar fazer a representação de como seria ela nos moldes mais próximo da proporção áurea, lembrando que, não é porque a logo não está seguindo essa proporção que está errada, ela apenas utiliza de outra visão de apresentar a marca.
Nos deteremos apenas na proporção áurea do corpo do 'F' róseo.
Primeiro criamos a logo com tamanhos aleatórios (dica desenhe antes no illustrator usando retângulos, elipses e triângulos, para facilitar o processo de desenho no illustrator).
O esboço do illustrator. Do lado direito a versão original, e do lado esquerdo a alteração sutil da logo.
Mas você precisa parametrizar os valores, então a brincadeira começa aí. Utilizando o seu desenho do illustrator, basei-se nos dados das informações dele para usar como os dados e crie um valor para o x e o y de onde a logo será gerado ao seu gosto. Desta forma ficando assim:
Depois de criado a função vamos usa-la como um ponteiro, apontando a sua localização em um mapa, eu usei um mapa online de Fortaleza, você pode usar qualquer outro. Basta testar.
Bem vamos falar da relação do Breakout do Pong e da Apple.
Mas vocês devem estar se perguntando o que raios a Apple tem haver com esses dois clássicos da atari? Simples fato é, o Apple I foi desenvolvido usando a mesma arquitetura do Breakout, que por sua vez usou a mesma arquitetura do Pong, isso nos termos de hardware da epoca.
Vamos destrinchar um pouco melhor essa história.
Quando foram desenvolver o Breakout, o Allan Alcorn (Engenheiro da Atari, que trabalhou no desenvolvimento do Pong) contratou o Steve Jobs para desenvolver o projeto do jogo com uma arquitetura mais bem elaborada que o Pong, com menos chips, então ele confirma que conseguiria em menos tempo do que eles precisavam, mas o Jobs lembrou de um amigo dele o Steve Wozniak que foi quem fez toda a arquitetura por trás desse aparelho.
Tanto o Jobs quanto o Wozniak eles trabalharam na Atari e na HP, e foram eles que fundaram a Apple.
E apos criar o Breakout, Wozniak continuou seus experimentos ate que criou o Apple I com a mesma arquitetura das maquinas do Breakout.
E com essa criação foi algo bastante grandioso e ao mesmo tempo inovador, já que dessa vez ele melhorou o projeto, já que dessa vez ele criou um terminal no Apple I e assim o aparelho teve não só questão de hardware, mas software também.
Olá pessoal, hoje iremos brincar de criar clássicos do atari, e o escolhido da vez foi ele, o Breakout. Com uma arquitetura simples e bem similar ao Pong, o breakout consiste em você acerta a bolinha em varios blocos que estão acima de você.
Mas vamos para a parte de programar o jogo. E nela você precisará criar vários boleanos para identificar a colisão da bola em sua barrinha, e nos "inimigos". Serão cerca de 16 inimigos para o tamanho da tela que será usada, caso queiram fazer em uma tela maior, basta aumentar a quantidade também. Para as cores dos bloquinhos criasse alguns floats, e neles atribuísse a função random(0, 255) para que varie de 0 a 255 da escala de cor.
Depois fazemos as funções de colisões possivel, e logo em seguida faremos a leitura das funções e criando todos os nossos objetos do jogo, nos seus devidos lugares.
O código encontra-se logo abaixo:
float bolaY=250 ;// onde a bola nasce, posição da bola
float bolaX=250 ;// onde a bola nasce, posição da bola
float dX=1; // velocidade da bola
float dY=1; // velocidade da bola
float tamBola=10;
float xP = 110; //posição da barra
float yP = 210; // posição da barra
float x1,x2,y1,y2;// variaveis para a função colisão
float xB=80; // tamanho da barra
float yB=10; // altura da barra
boolean x,z1,mz1,z2,mz2,z3,mz3,z4,mz4,mz5,z5,mz6,z6,mz7,z7,mz8,z8,mz9,z9,mz10,z10,mz11,z11,mz12,z12,mz13,z13,mz14,z14,mz15,z15,mz16,z16;
float xB1=20;// tamanho do inimigo
float yB1=10;//altura do inimigo
float xP1=0;//posição do inimigo
float yP1=20;//posição do inimigo
float xP2=20;
float xP3=40;//posição do inimigo
float xP4=60;
float xP5=80;
float xP6=100;//posição do inimigo
float xP7=120;
float xP8=140;
float xP9=160;
float xP10=180;//posição do inimigo
float xP11=200;
float xP12=220;
float xP13=240;//posição do inimigo
float xP14=260;
float xP15=280;
float xP16=300;
float corz11,corz12,corz13;
float corz21,corz22,corz23;
float corz31,corz32,corz33;
float corz41,corz42,corz43;
void setup (){
size(320,240);
mz1=false;
mz2=false;
mz3=false;
mz4=false;
mz5=false;
mz6=false;
mz7=false;
mz8=false;
corz11=random(0, 255);
corz12=random(0, 255);
corz13=random(0, 255);
corz21=random(0, 255);
corz22=random(0, 255);
corz23=random(0, 255);
corz31=random(0, 255);
corz32=random(0, 255);
corz33=random(0, 255);
bolaX=100;
bolaY=100;
}
Boolean colisao (float x1,float y1,float x2, float y2){
if(x1>x2 && x1<(x2+80) && y1>y2 && y1<(y2+10)){
return true;
} else {
return false;
}
}
Boolean colisaoInimigo (float x1,float y1,float x2, float y2){
if(x1>x2 && x1<(x2+20) && y1>y2 && y1<(y2+10)){
return true;
} else {
return false;
}
}
void bloco (float x1, float x2,float y1,float y2){
if (x==true){
dY= -dY-(dY*0.01);
}
}
void draw(){
background(0);
//bola em movimento
ellipse(bolaX,bolaY,tamBola,tamBola);
bolaY=bolaY+dY;
bolaX=bolaX+dX;
if(bolaY>=(height-(tamBola/2))){
bolaX=40;
bolaY=40;
ellipse(40,40,tamBola,tamBola);
bolaY=bolaY+dY;
bolaX=bolaX+dX;
}
if(bolaY<=(tamBola/2)){
dY= -dY-(dY*0.01);
}
if(bolaX>=(width-(tamBola/2))){
dX= -dX-(dY*0.01);
}
if(bolaX<=(tamBola/2)){
dX= -dX-(dY*0.01);
}
rect(xP, yP, xB, yB); // barra inferior
if(keyPressed == true) {
if(keyCode == RIGHT) {
if(xP<=(320-xB))
xP+=8;
} else if(keyCode == LEFT) {
if(xP>=0){
xP-=8;
}
}
}
// colisão
x = colisao(bolaX,bolaY,xP,yP);
if (x==true){
if(bolaX>xP && bolaX
O resultado do jogo é mais ou menos esse.
Botão no processing? E existe uma função disso? Bem vamos criar uma função só pra animar um botão simples circular. Então ele vai ter na tela de desenho um botão. Criaremos os 3 principais estados do botão o UP, OVER e DOWN. Com um calculo de distancia em duas dimensões, sabemos se o cursor do mouse esta dentro ou fora do nosso botão. Para o resultado estar dentro de uma unica equação vamos usar o produto notável da diferença.
Então vamos começar a programar no processing. Para cada estado do nosso botão eu atribui uma cor para ele, assim sabemos em que estado ele se encontra. E finalmente, o código ficará assim como está logo abaixo:
int MLargura;
int MAltura;
int diametro;
float x;
//função para determinar a distancia entre dois pontos (usando produtos notaveis)
float distancia2D(int X1,int Y1, int X2,int Y2){
float R;
R = sqrt((X1*X1) -(2*X1*X2) + (X2*X2) + (Y1*Y1) - (2*Y1*Y2) + (Y2*Y2));
return R;
}
void setup(){
size(600,600);
MLargura = width/2;
MAltura = height/2;
diametro = 100;
}
void draw(){
x=(distancia2D(MLargura,MAltura,mouseX,mouseY));
if (x > diametro/2) { // status UP do botão
fill(246,172,95);
noStroke();
ellipse(MLargura,MAltura,diametro,diametro);
} else if(mousePressed == true){ // status DOWN do botão
fill(183,245,102);
ellipse(MLargura,MAltura,diametro,diametro);
} else { // status OVER do botão
fill(102,245,206);
ellipse(MLargura,MAltura,100,100);
}
}
Sou um aluno do Curso de Sistemas e Mídias Digitais da Universidade Federal do Ceará (UFC). Já estudei Matemática (bacharelado) e Matemática industrial, na mesma universidade. Trabalho como editor de vídeos do Laboratório de Mídias Eletrônicas, vinculada a Universidade Virtual (vinculada a UFC).