quinta-feira, 10 de abril de 2014

Harmonografo

(Harmonia + grafia) Instrumento para combinar e registrar mecanicamente duas ou mais vibrações em uma só curva. Geralmente, são máquinas que simulam dois braços em forma de pêndulo e, com uma caneta ou lápis na ponta de cada braço, realizam movimentos circulares em superfícies, de acordo com o balanço de cada pêndulo em atuação com a gravidade (a frequência, a fase e a amplitude).

A criação dessas máquinas, que começaram a aparecer em meados do século 19 e chegou em popularidade na década de 1890, não podem ser conclusivamente atribuídas a uma única pessoa, embora acredita- se que Hugh Blackburn, professor de matemática na Universidade de Glasgow, possa ter sido o inventor oficial.

Um tipo de harmonógrafo também bem conhecido é o pantógrafo, que usam motores elétricos em vez de pêndulos para mover uma caneta para criar desenhos fantasticamente detalhados e belas linhas. A principal diferença entre este e o harmonógrafo tradicional, além dos motores, é que o pantógrafo possui braços em formato de tesouras que podem ter suas posições alteradas para formarem desenhos diferentes de acordo com a velocidade atribuída a eles.

Há também quem utilize tipos de harmonógrafos como brinquedos. É o caso do espirógrafo, um brinquedo muito famoso que consiste em um conjunto de engrenagens, anéis e retas de plástico com dentes e buracos em seu interior, que, para usá-los, se encaixam um dentro do outro e, em cima de uma folha de papel, com a ajuda de um lápis introduzido nos buracos vazados das peças e arrastado pelo papel, fazem as peças se moverem em movimentos uniformes, desenhando no papel diversas formas.

Nosso Hamonografo  é baseado em funções trigonométricas seno e cosseno e variações de ângulo e amplitude.

O eixo X é baseado na formula = L/2 + cos(angulo1)*(a - i), onde L é a largura da tela, a é a amplitude inicial, e i é um incremento que se modifica em tempo de execução. Em tempo de execução as variáveis angulo1 e i são modificadas fazendo assim uma elipse com amplitude menor e com rotação diferente.

O eixo Y é baseado na formula = L/2 + seno(angulo1)*(a + i), onde L é a largura da tela, a é a amplitude inicial, e i é um incremento que se modifica em tempo de execução. Em tempo de execução as variáveis angulo1 e i são modificadas fazendo assim uma elipse com amplitude maior e com rotação diferente.

Utilizando x = 350 + cos(angulo1)*(200-i), onde angulo1  e i são iniciados em 0(zero),
Y = 350 + sen(angulo2)*(200+i), onde angulo2 é inciado em 60 e o i em 0 e com ajuda de algumas variáveis de controle para realizar o controle dos incrementos nós obtivemos a seguinte imagem:

No processing utilizamos a função descrita abaixo:

int relogio;        //Variável para fazer o timer
int intervalo=100;  //intervalo em millisegundos

//Variáveis para criação do Harmonografo
int anguloHorizontal = 0;    //angulo inicial passado para posição x
int anguloVertical = 60;     //angulo inicial passado para posição y
float incHorizontal = 3;    //valor que incrementa o angulo dentro do método Desenho()
float incVertical = 3;      //valor que incrementa o angulo dentro do método Desenho()
float amplitude = 200;      //valor que será multiplicado ao resultado do coseno ou seno para a amplitude do desenho
float variacaoAmplitude = 6;  //Valor que é utilizado para incrementar e decrementar a amplitude. Assim gerando a dinamica do desenho

//dimensoes da tela
int largura = 700;
int altura = 700;

//Angulos

float cos; 
float sen;
float tan;

//Controle
boolean controle;  //variável de controle para modificação de parametros

void desenho()
{
 
  fill(cos*(100-variacaoAmplitude),sen*200,tan*(150+variacaoAmplitude));
  ellipse(350+cos*(amplitude - variacaoAmplitude ) , 350+-sen*(amplitude +   variacaoAmplitude),10,10);
  anguloHorizontal += incHorizontal;
  anguloVertical += incVertical;
}

void draw()
{
  cos = cos(radians(anguloVertical));
  sen = sin(radians(anguloHorizontal));
  tan = tan(radians(anguloHorizontal));
  if (millis()>relogio+intervalo)
  {
    relogio=millis();
   
    if(!controle)
    {
     variacaoAmplitude++;
    }
    else
    {
     variacaoAmplitude--;
    }
   
    if(variacaoAmplitude > 120)
    {
      controle = !controle;
    }
    else if(variacaoAmplitude < -120)
    {
     controle = !controle;
     anguloVertical = - anguloVertical;
     anguloHorizontal = - anguloHorizontal;
    }
}



Nenhum comentário:

Postar um comentário