Parte 1 - O que é um Espirógrafo
Para iniciar o trabalho, primeiro tive que entender o que era um espirógrafo, eu já tive uma dessas ferramentas quando era criança, mas não fazia ideia do seu nome.
O espirógrafo é uma ferramenta de desenho que produz curvas matemáticas conhecidas como hipotroclóides e epitroclóides.
Como funciona um Espirógrafo
Um espirógrafo consiste em um conjunto de engrenagens de plástico e outras formas como anéis, triângulos, ou barras retas. Existem vários tamanhos e formas de engrenagens, e todas as extremidades possuem dentes para se encaixar em outras peças. Uma caneta é usada tanto para desenhar quanto para promover a força locomotiva; é requerida alguma prática sobre Espirógrafo para poder operá-lo através das peças fixas e móveis.
Espirógrafo
Exemplos de Desenhos feitos com Espirógrafos
Parte 2 - Inspiração
Para realizar meu próprio espirógrafo, busquei inspiração em alguma forma, para fazer algo que não fosse somente um desenho aleatório, decidi então que faria um espirógrafo que se inspirasse, pelo menos no início, no formato de um átomo.
Parte 3 - O Código
Para realizar os desenhos do espirógrafo, utilizei obviamente dos calculos de seno e coseno de variáveis de raio já informadas previamente. Usando o comando BeginShape, o código utiliza de um for que vai se incrementando patra desenhar a forma baseada nos calculos trigonometricos. O comando vertex então desenha as formas conectando uma série de vértices recebendo os valores do raio.
Para interação, adicionei comandos para os três botões do mouse, o esquerdo incrementa com um valor aleatório o valor do raio inicial, o esquerdo diminui e o do meio muda a cor do desenho. Interessante notar que, mesmo com valores alatórios, o código ainda consegue formar imagens interessantes e bonitas de certa forma, pois esses valores aleatórios passam por um calculo trigonométrico e já terminam em um certo padrão matemático.
Para deixar o código mais interessante e que não ficasse tão estático, adicionei também um movimento ao desenho formado.
Código:
int x = 0;
float raio1 = 7;
float raio2 = 4;
float raio = raio1/raio2;
float R = 450;
float r = R/raio;
float angulo = 0;
float inc = PI/60;
color espi = color(random(10, 245), random(10, 245), random(10, 245));
void setup() {
size(800, 500);
smooth();
noFill();
strokeWeight(2);
frameRate(60);
if (raio < 1) {
R = 225*raio/(1-raio/2);
r = R/raio;
}
}
void draw() {
background(0);
fill(255);
text ("Use o Mouse", 10, 140);
text ("Esquerdo - Modifica o Desenho(aumenta o raio)", 10, 160);
text ("Direito - Modifica o Desenho(diminui o raio)", 10, 170);
text ("Meio - muda a cor", 10, 180);
noFill();
ellipse (50, 80, 50, 80);
ellipse (50, 60, 5, 10);
line (30, 60, 70, 60);
line (50, 60, 50, 40);
translate(width/2, height/2);
translate(abs(R-r)/2*cos(angulo), abs(R-r)/2*sin(angulo));
stroke(espi);
strokeWeight(3);
espi();
angulo += inc;
}
void espi() {
beginShape();
for (float i=0; i<angulo; i+= PI/100) {
vertex(abs(R-r)/2*cos(i) + r/2*cos(-i*raio), abs(R-r)/2*sin(i) + r/2*sin(-i*raio));
}
endShape();
}
void mousePressed() {
if (mouseButton == LEFT) {
raio=-random(1, 10);
} else if (mouseButton == RIGHT) {
raio=+random(1, 10);
} else {
espi = color(random(10, 245), random(10, 245), random(10, 245));
}
}
Screenshot:


Nenhum comentário:
Postar um comentário