Month: January 2012

Processing – Carros 1.0

Já faz um tempo que estava enrolando para aprender Processing. Depois de um tempo de hibernação, retomei as leituras do livro da coruja e comecei a estudar alguns tutoriais, no próprio site.

Fiz um breve estudo para iniciar a brincadeira. Chamei de “Carros 1.0“.

Clique na imagem acima para acessar. Depois de abrir, passe o mouse para a esquerda e para direita para acelerar ou desacelerar os objetos.

Um dos meus objetivos é aprender um pouco e excercitar a Programação Orientada a Objetos. Achei o conceito muito interessante. Era algo que eu já havia tido algum contato quando fazia sites com ActionScript há alguns anos, mas que nunca havia parado para estudar. Certamente irá me ajudar em projetos mais sofisticados com Processing daqui por diante, como também poderei compreender melhor o “linguajar”  dos programadores.

Para quem não me conhece, não sou programador, tenho apenas algumas noções. Estudei algo sobre Pascal e C na Escola Técnica. Mas eu ia muito mal nas matérias de lógica de programação, queria era mexer nos programas gráficos (windows 3.11 na época). Depois de uns 5 anos, comecei a fazer sites em Flash e, para deixá-los mais sofisticados, acabei retomando os estudos sobre algoritmos. Mas, parou por aí, mais ou menos em 2006. Atualmente, convivo com desenvolvedores Java no meu trabalho. Um bando de nerd, na verdade, sempre argumentando com classes, objetos, parâmetros, null pointer exceptions, etc.

Segue o código-fonte abaixo: certamente, haverá uma forma mais simples de se construir esse algoritmo. Por gentileza, fique à vontade para criticá-lo e sugerir outra lógica: ficarei muito grato em receber sugestões para aprender um pouco mais.

// carros 1.0 – Daniel Melo Ribeiro www.danielmelo.net
// Estudo de programacao orientada a objeto com Processing.

float acelerador = 0.01;
float tamanho = 30;

// declaracao dos objetos da classe Carros

Carro fusca;
Carro kombi;
Carro corsa;
Carro uno;
Carro palio;
Carro passat;
Carro ka;
Carro idea;
Carro meriva;
Carro sandero;
Carro brasilia;
Carro premio;
Carro corolla;
Carro sonata;
Carro fiesta;
Carro fox;

// tamanho da tela, framerate e inicializacao dos objetos
// cada objeto possui os seguintes parametros: cor, posicao inicial x, posiciao inicial y e velocidade.

void setup () {
size (400, 240);
frameRate(30);
fusca = new Carro(#AF0B0B, 0, 0, 1);
kombi = new Carro (#D8D255, 0, 15, 0.2);
corsa = new Carro (#121476, 0, 30, 0.6);
uno = new Carro (#FC34AA, 0, 45, 1.6);
palio = new Carro (#08DC2A, 0, 60, 0.05);
passat = new Carro (#6D4321, 0, 75, 0.9);
ka = new Carro (#98FA09, 0, 90, 0.03);
idea = new Carro (#34AE23, 0, 105, 1.9);
meriva = new Carro (#45AA00, 0, 120, 0.01);
sandero = new Carro (#B976CC, 0, 135, 2);
brasilia = new Carro (#FA34EE, 0, 150, 0.9);
premio = new Carro (#01AFC8, 0, 165, 0.8);
corolla = new Carro (#DADADA, 0, 180, 2.6);
sonata = new Carro (#783453, 0, 195, 0.4);
fiesta = new Carro (#1ABC34, 0, 210, 1.2);
fox = new Carro (#E365FF, 0, 225, 0.6);
}

// exibe cada carro e inicia o deslocamento.

void draw () {
background(0);
fusca.mostracarro();
fusca.andacarro();
kombi.mostracarro();
kombi.andacarro();
corsa.mostracarro();
corsa.andacarro();
uno.mostracarro();
uno.andacarro();
palio.mostracarro();
palio.andacarro();
passat.mostracarro();
passat.andacarro();
ka.mostracarro();
ka.andacarro();
idea.mostracarro();
idea.andacarro();
meriva.mostracarro();
meriva.andacarro();
sandero.mostracarro();
sandero.andacarro();
brasilia.mostracarro();
brasilia.andacarro();
premio.mostracarro();
premio.andacarro();
corolla.mostracarro();
corolla.andacarro();
sonata.mostracarro();
sonata.andacarro();
fiesta.mostracarro();
fiesta.andacarro();
fox.mostracarro();
fox.andacarro();

if (mouseX < width/2) {    //se o mouse ficar à esquerda, diminui a velocidade
acelerador = -0.03;
}

if (mouseX > width/2) {   //se o mouse ficar à direita, aumenta a velocidade
acelerador = 0.03;
}

}

class Carro {

// caracteristicas do carro: cor, posicao (x e y) e velocidade

color cor;
float posicaox;
float posicaoy;
float velocidade;

Carro (color cor_c, float posicaox_p, float posicaoy_p, float velocidade_v) {

// recebe, via parametro, os atributos de cada carro

cor = cor_c;
posicaox = posicaox_p;
posicaoy = posicaoy_p;
velocidade = velocidade_v;
}

void mostracarro () {

// posiciona e exibe o carro na tela

noStroke();
fill(cor);
rect (posicaox-tamanho, posicaoy, tamanho, 10);

}

void andacarro () {
posicaox = posicaox + velocidade;
velocidade = velocidade + (acelerador*5);

// ao chegar ao final de tela, retorna para o comeco
if (posicaox > width+tamanho) {
posicaox = 0;
}

// ao chegar no inicio da tela, retorna para o final
if (posicaox < 0) {
posicaox = width+tamanho;
}

}

}

Networks: knowlegde in the age of interconnectivity

Excelente video com o Manuel Lima, o cara do Visual Complexity.

Alguns trechos:

We´re really facing a paradigm shift in the sense that trees are no longer able to acomodate the complexity of modern world.

Neste trecho, ele comenta que, historicamente, a metáfora da árvore muitas vezes foi utilizada para representar o conhecimento, sempre de maneira hierárquica e harmônica. Esse conceito começa a mudar no século XX, com a emergência dos estudos da complexidade e do caos.

The network is an alternative concept of beauty.

A beleza não necessariamente deve estar na harmonia ou no reconhecimento de padrões – apesar de ser algo que sempre buscamos. Não é de maneira fortuita que muitos artistas apontaram para esse caminho da abstração (inclusive Pollock, que Manuel cita em um trecho do vídeo).