Softwares como Processing possuem funções que simulam a  aleatoriedade. Os números randomicos podem conferir um certo grau de “caos” ou desordem na estrutura das composições, causando efeitos ou resultados estéticos complexos. Vejam estas reproduções das pinturas de Piet Mondrian e Jackson Pollock:

 

Tableau 2 (Piet Mondrian -1922)

Tableau 2 (Piet Mondrian -1922)

 

 

Number 1 (Jackson Pollock - 1949)

Number 1 (Jackson Pollock - 1949)

 

É  fácil constatar que a pintura de Mondrian denota um aspecto estrutural ordenado e bem construído, tanto   pelo uso das linhas ortogonais  quanto pela distribuição  cromática. Aparentemente,  a incerteza e o acaso não entraram na produção ou projeto desta obra.

Já  Pollock contou com uma parcela de acaso nesta pintura. Aqui o artista utilizou o seu   drip painting  , método pelo qual despejava quantidades de tinta líquida sobre a tela esticada no chão. Apesar da aparente confusão,  o efeito de profundidade e movimento de padrões  são inconfundíveis na obra deste  representante do expressionismo abstrato. Alguns matemáticos comparam a estrutura de seus quadros com os famosos fractais:

 

Sabemos que no  universo da computação os algoritmos desempenham a função organizativa da programação, isto é, são regras precisas construídas por  lógica pura. Neste caso, para obtermos resultados imprevistos, contamos com certas funções matemáticas que fornecem séries aleatórias de números.  Veja esta sequencia de imagens:

Intersection.Aggregate - Jared Tarbell

 

Intersection.Aggregate - Jared Tarbell

 

Intersection.Aggregate - Jared Tarbell

 

Estas imagens foram geradas por um código feito no Processing pelo artista Jared Tarbell  - veja a execução em tempo real no site Complexification. Apesar de apresentarem a mesma escala de cores, as abstrações são diferentes entre si e, de modo geral, lembram as pinturas de Pollock. A série foi gerada pela mesma matriz (código) , ordenada pela mesma regra, porém varia pela introdução das funções randômicas que orientam a duração e movimentação das “pinceladas”. Vejam esta outra imagem de Tarbell:

 

Substrate - Jared Tarbell

 

O aspecto geométrico assemelha-se ao processo racional de Mondrian. Novamente, o algoritmo promove a construção, elegendo  fatores aleatórios para a posição das linhas e suas subdivisões. O fato da imagem ser “menos caótica” não exclui a possibilidade do uso de algumas variáveis randômicas. Veja aqui uma parcela do código responsável pelo desenho acima – note o destaque para a função random( ):

 

void findStart() {
// pick random point
int px=0;
int py=0;
// shift until crack is found
boolean found=false;
int timeout = 0;
while ((!found) || (timeout++>1000)) {
px = int(random(dimx));
py = int(random(dimy));
if (cgrid[py*dimx+px]<10000) {
found=true;
}
}

Os valores aleatórios gerados pela função random() são criadoss a partir de números extraídos do relógio interno(clock)  do computador e ainda são processados por funções matemáticas.  Assim, podemos dizer que estes valores são pseudo-randômicos, pois podem ser repetidos ou recalculados por processos determinísticos previsíveis. De qualquer maneira,  a percepção desta previsibilidade não é verdadeira na escala  do ponto vista humano. No Processing, geramos essa “impressão” sobre a grandeza aleatória com as seguintes funções:

random ( valor );
random (valor 1, valor 2);

 

Por exemplo,  se temos o código:

float x=random (10);

 

A função gera um número inesperado que fica no intervalo ente 0 (zero)  e o parâmetro, no caso 10. Logo, a variável x pode valer números não inteiros (float) que variam entre este intervalo. No outro formato, temos:

float x=radom (5,10); 

Neste caso, contamos com dois parâmetros para a função e aqui x pode valer qualquer número entre 5 e 10. Vamos a um exemplo mais prático:

 

line (0 , random(100) , 300,  random(100) ); 

 

Lembrando que para desenharmos uma linha temos uma função cujos parâmetros são coordenadas do ponto inicial (x1,y1)  e coordenadas do ponto final da linha (x2,y2):

 

line (x1,y1,x2,y2);

 

Então, no exemplo, escolhemos números aleatórios para o y1 e y2. Temos como resultado uma linha diagonal ou horizontal  que começa na coordenada (0, random(100) ) e termina no ponto
(300,random(100) ). O resultado pode ser mais interessante se inserimos esta função na repetição :

 

void setup() {
  size (300,300);
  background(0);
  smooth();
  stroke (255,20); 
}

void draw () {
 // background(0);
  line (0 , random(300) , 300,  random(300) ); 
}

Recarregue (refresh) a página para reiniciar a animação:

A outra maneira de utilização de random() utiliza dois parâmetros. Veja a modificação do código anterior:

 

void setup() {
  size (300,300);
  background(0);
  smooth();
  stroke (255,10); 
}

void draw () {
 // background(0);
  line (random(125,175) ,0 , random(125,175) , 300 ); 
}

 

Recarregue (refresh) a página para reiniciar a animação:

 

Aqui a função limita o intervalo de números aleatórios para as coordenadas da linha:

  line (random(125,175) ,0 , random(125,175) , 300 ); 

A posição x1 inicial da linha e final x2 variam  apenas entre os pontos 125 e 175,  determinando o desenho de um feixe central de traços.

Neste próximo exemplo utilizamos a função random() para gerar uma animação:

 

PImage img;

void setup() {
size (500,334);
background(0);
img=loadImage("simples.jpg");
}

void draw() {
image (img,0,0);
tint(79,160,224,30);
image (img,0,random(-20,20),1000,600);
}

Aqui a imagem é reposicionada com image (img, random(-20,20),1000,600) . Veja que a coordenada y (vertical)  da imagem varia, pois a instrução está dentro de draw():

 

 

Num próximo post veremos outras aplicações para a função random().

Tagged with:
 

Fatal error: Class 'OAuthSignatureMethod_HMAC_SHA1' not found in /home/navax/www/blog/wp-content/plugins/twitter-tools/twitteroauth.php on line 62