sábado, 6 de março de 2010

Retângulos

Mais uma vez há um outro passo lógico em geometria que é imitado por uma função gráfica primitiva. Enquanto um pixel pode ser pensado como um ponto geométrico, sem massa, uma linha é um objeto unidimensional que, teoricamente, apaga-se em duas direções em direção ao infinito. Felizmente para nós, "engenheiros de computação gráfica" não são tão abstrato como matemáticos. O próximo passo lógico é um objeto bidimensional contendo pontos em ambos os eixos X e eixo Y. Apesar de que um triângulo será a próxima melhor coisa, acredito que o retângulo é mais fácil de lidar, nesta fase, porque os triângulos carregam consigo a conotação dos polígonos poderosos, e nós não estamos absolutamente lá ainda. Aqui está a função rect:
void rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);


Esta imagem pode te esclarecer melhor a função:



As variáveis x1, y1, x2 e y2 define a distância da margem e é traçada uma linha perpendicular a cada variável formando pontos de intersecções onde o programa verifica quais são esses e os liga com linhas formando assim o retângulo.

vamos agora ao código:

// Cabeçalho com a inclusão das bibliotecas
// necessárias para esse programa
#include <conio.h>
#include <stdlib.h>
#include <allegro.h>

// Inicio do programa
void main(void)
{
int x1, y1, x2, y2;
int red, green, blue, color;

// Inicializa a Allegro
allegro_init();

// Inicializa o teclado
install_keyboard();

// Inicializa o lançamento de um número aleatório
srand(time(NULL));

// Inicializa o modo do video para 640x480
int ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640,
480, 0, 0);
if(ret != 0){
allegro_message(allegro_error);
return;
}
// Mostra a resolução da tela
textprintf(screen, font, 0, 0, 15,
"Rect Program - %dx%d - Pressione ESC para
sair",
SCREEN_W, SCREEN_H);

// Aguarda o pressionamento da tecla ESC
while(!key[KEY_ESC])
{
// Configura uma localização aleatória
x1 = 10 + rand() % (SCREEN_W - 20);
y1 = 10 + rand() % (SCREEN_H - 20);
x2 = 10 + rand() % (SCREEN_W - 20);
y2 = 10 + rand() % (SCREEN_H - 20);

// Configura uma cor aleatória
red = rand() % 255;
green = rand() % 255;
blue = rand() % 255;
color = makecol(red, green, blue);

// Desenha um retângulo
rect(screen, x1, y1, x2, y2, color);
}
// finaliza o programa
allegro_exit();
}
END_OF_MAIN();


Aproveitando que estamos falando de retângulos para se desenhar retângulos com preenchimentos é só trocar a linha:
rect(screen, x1, y1, x2, y2, color);
por:
rectfill(screen, x1, y1, x2, y2, color);

Este vídeo mostra a execução do programa:



Para baixar este exemplo clique aki.

Nenhum comentário:

Postar um comentário