Kandinsky

O Falsificador de Arte

A arte como sabemos é algo bem abstrato, sentimental e subjetiva. Algo difícil para uma máquina reproduzir, porém, nada é impossível.
Um computador só faz a reprodução de comandos. Então se o artista der os comandos certos... será arte?


Na atividade de hoje, iremos reproduzir o quadro de Kandinsky, não perfeitamente é claro, mas como o quadro em questão, Farbstudie Quadrate, é feito de formas geométricas e seguem um certo padrão, podemos desenvolver um algoritmo que faça nossa falsificação! Não sairá idêntico, mas parecido.

Farbstudie Quadrate, 1913, Wassily Kandinsky

Vamos ao código!

  • Primeiramente adicionei a biblioteca ControlP5 e a implementei com os controladores Horizontal e Vertical, como pedido no enunciado;
  • "Caminhando aos poucos" criei a função circulo que multiplica o valor do raio para ter o diametro;
    void circulo(int x, int y, int r){
    ___ ellipse(x, y, r*2, r*2);
    }
  • criei também a função bloco;
    1. Testei criar um quadrado e 3 círculos, cada círculo com tamanho menor do que o anterior;
    2. Depois com um loop de círculos;
    3. E por fim adicionei os números aleatórios;
    void bloco(int x, int y, int l){
    ___ rect(x, y, l, l);
    ___ int quantCirculo = (int) random(2, 4);
    ___ int tamanhoCirculo = l/2;
    ___ for(int i = 0; i < quantCirculo; i++){
    ___ ___ circulo(x,y,tamanhoCirculo);
    ___ ___ tamanhoCirculo = (int) random(15, (tamanhoCirculo - 10));
    ___ }
    }
  • Adicionei uma função extra de "corAleatoria";
  • O próximo passo seria utilizar essas funções em conjunto!
  • Pensei em utilizar um loop para os blocos verticais e outro loop para os blocos horizontais na "draw", não deu o resultado esperado, pois a draw executa o código várias vezes;
  • Tentei também com as propriedades do ControlP5
    .addCallback(new CallbackListener() {
    ___ public void controlEvent(CallbackEvent event) {
    ___ ___ if (event.getAction() == ControlP5.ACTION_RELEASED) {
    ___ ___ ___ kandinskyMethod( horizontal , vertical );
    ___ ___ }
    ___ }
    });
  • Não consegui encontrar um ACTION que se adequasse a necessidade da atividade
  • Então utilizei o tradicional e salvador "IF"
    int vH = 0;
    int vV = 0;
    void draw(){
    ___ if(vH != horizontal || vV != vertical){
    ___ ___ kandinskyMethod(horizontal, vertical);
    ___ ___ vH = horizontal;
    ___ ___ vV = vertical;
    ___ }
    }

MAMI 2018.1