quinta-feira, 29 de agosto de 2019

Tarefa 2 - Kandinsky, Estudo de Cores e Discos de Vinil

"Apresentar o desenvolvimento de uma aplicação que,
empregando laços, gere quadros com uma função que
replica um bloco formado por um quadrado e três
círculos coloridos. A aplicação deve receber a quantidade
de blocos por linha e coluna por duas variáveis globais"

Farbstudie Quadrate, 1913 by Wassily Kandinsky

Temos acima o modelo natural de um quadro de Kandinsky, pintado com a intenção de fazer um estudo de harmonia de cores. Vamos tentar produzir uma cópia deste quadro utilizando Processing!
O modo de receber os valores das variáveis é diretamente pelo código, mas em Processing com Python, poderia receber, de maneira simples, entradas pelo teclado.
Como foi pedido, a quantidade de linhas e colunas são recebidas como variáveis globais (linha, coluna). Também adicionei a opção de receber o tamanho do lado de cada quadrado (lado) e a quantidade de círculos dentro de cada quadro (circ). Dentro do setup é definido o tamanho da janela, para logo em seguida termos nosso primeiro procedimento, pintaTela().


Decidi produzir um código bastante modularizado. Este procedimento chama uma função, que também chamará outras duas funções, como veremos a frente.
pintaTela() será nosso procedimento destinado a controlar o que será desenhado na tela. Fiz uso de dois for aninhados, que são responsáveis por indicar a posição de cada quadro em uma espécie de matriz, como mostrado no desenho abaixo, e indicar onde eles devem ser pintados, usando pintaQuadro(). O centro de cada quadro será na metade do lado de cada um deles.
Matriz de quadros, j controla a entrada em colunas e i controla a entrada em linhas.

Como falado anteriormente, a função pinta quadros chama outras duas funções, sendo estas responsáveis pela AÇÃO da pintura em tela realmente.
Este procedimento recebe como parâmetros o ponto central do quadro, que será usado na geração de um quadrado, com pintaQuadrado, e na geração de círculos, com pintaCirculo. A variável diametro é usada para definir o tamanho do círculo, onde o diâmetro do primeiro é sempre igual ao lado do quadrado do quadro, com os círculos seguinte sendo sempre menores que o anteriores, se utilizando de um valor gerado aleatoriamente, em função do lado e do número de círculos, para reduzir seu tamanho. 


Esse procedimento pode até parecer inútil, mas a modularização do código tem a vantagem de tornar sua compreensão e sua leitura mais fáceis, além de garantir um reuso do nosso código.
Aqui não há mistério, a cor interna do quadrado e do círculo são geradas aleatoriamente, o tamanho do quadrado está em função da variável lado e o do círculo da variável diametro, passada anteriormente como parâmetro e usada como D no procedimento.


Abaixo temos dois resultados com dois conjuntos de entradas diferentes.
Variáveis Globais: coluna = 5; linha = 3; circ = 3; lado = 100. Tamanho da tela é (800,800).

O primeiro resultado foi baseado no que foi pedido pelos professores. É possível notar a grande variação de tamanho dos círculos e a alta variedade de cores. Um olho bem treinado conseguiria facilmente perceber relações complementares e até tríades em meio a esses quadros.


Variáveis Globais: linha e coluna = 1; circ = 1000; lado = 800. Tamanho da tela é (800,800).
Me apaixonei profundamente por esse resultado pela aparência parecida com a de um vinil. A grande quantidade de círculos acabou gerando esse resultado. 


Espero que tenha sido uma leitura e um aprendizado agradável, abaixo segue o link para download do código fonte.
Código em Processing: Tarefa 2

Nenhum comentário:

Postar um comentário