(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;
}
}