terça-feira, 13 de julho de 2010

Visões do camelo

O Perl não é conhecido por suas habilidades gráficas, mas com algumas bibliotecas é possível gerar imagens interessantes com muita facilidade.

O mais fácil é usar o módulo GD, conforme o exemplo abaixo:

use GD;

my $img=new GD::Image(256,256);

my @colours=();

for my $c (0..255) {
$colours[255-$c]=$img->colorAllocate($c, $c, $c);
}

for my $i (0..255) {
for my $j (0..255) {
$img->setPixel($i, $j, $colours[($i*$j)%255]);
}
}

binmode STDOUT;
print $img->png;

Esse pequeno programa faz o seguinte:
  1. Instancia uma imagem com 256 pontos de cada lado;
  2. Cria uma paleta de cinzas (sendo 0 branco e 255 preto);
  3. Atribui a cada ponto da imagem uma a cor dada pelo produto das coordenadas;
  4. Escreve a imagem para o stdout.
Porque a imagem é escrita para o stdout, é preciso usar um pipe ao rodar o programa:

imagem.pl > img.png


O resultado parece algo vindo de uma ruina Maia e também não ficaria mal num museu de arte moderna:


Trocando os números inteiros por primos (no eixo horizontal; o eixo vertical continua com os inteiros), o resultado ganha bastante ruído, mas continua interessante.

Finalmente, coloquei em cada ponto (i,j) o resto da divisão do i-ésimo primo pelo j-ésimo primo. Surgiu um deserto misterioso. Não é por nada que os primos deixam os matemáticos perdidos!

Nenhum comentário: