Alguns de vocês devem se perguntar: "Como os espirógrafos funcionam?". Mas a maioria de vocês perguntaria antes "espiro-o-que??".
Bem, espirógrafo é aquele brinquedo que muitos de nós usamos quando pequenos para fazer umas "espirais malucas" desenhadas no papel. O brinquedo é esse aí:
A mecânica do brinquedo é bem simples: uma roda dentada gira dentro de um círculo (também dentado). Sua caneta, que está presa em um orifíco da roda dentada acompanha dois movimentos distintos que são somados: o movimento circular em torno do ponto central do grande cículo (vamos chamar este ponto de O) e um movimento circular em torno do centro da roda dentada (vamos chamar o centro da roda dentada de C). Este centro, por sua vez, está em movimento. É a soma destes dois movimentos que faz surgir aqueles "desenhos muito doidos de São Tomé".
Mas o que nos interessa aqui é saber: como reproduzir estes desenhos? Ou em outras palavras: como parametrizar o dezenho, qual a matemática por trás disso? Pode não parecer, mas levantar as equações paramétricas destes traços é bem simples.
Primeiro vamos a algumas definições. Como eu não sou matemático (nem bobo) vamos colocar o centro do círculo maior na origem do nosso sistema de coordenadas. Chamamos o centro deste círculo de O (origem). Chamaremos também o Raio do círculo maior de R.
O círculo menor possui dois parâmetros importantes: o raio do círculo (que chamaremos de r) e o raio do traço, ou seja, a distância entre o centro do círculo e o ponto onde o desenho é traçado (aquele lugar que colocamos a caneta), chamamos este raio de r'. Ao centro deste círculo damos o nome de C. Ao ponto onde colocamos a caneta damos o nome de P.
Mais uma definição antes de começarmos: estamos assumindo aqui que o círculo menor translada no sentido anti-horário!
##Parte I - Parametrizar a posição do ponto C
Assim que começamos a traçar nossa espira, movimentamos o círculo menor no sentido anti-horário. O que vamos levantar aqui é a posição do ponto C (centro do círculo menor) em relação ao ângulo (theta).
Tomando a distancia entre o centro da roda dentada e o centro do círculo maior como o raio do círculo transcrito pela translação da roda menor, temos:
Assim temos a equação paramétrica (nosso parâmetro é o ângulo theta) que retorna um ponto (x,y) para o ângulo theta.
##Parte II - Parametrizando o ponto P em relação ao ponto C
Agora que temos a posição do ponto C, vamos encontrar a posição do ponto P em relação ao ponto C. Novamente recorremos ao desenho para facilitar a explicação:
Note que quando transladamos a roda menor no sentido anti-horário (theta crescente) essa mesma roda menor faz um movimento de rotação no sentido horário (phi decrescente). Isso nos leva a:
O sinal negativo na equação de y se dá justamente por essa rotação no sentido horário. Para melhor visualizar imagine que começamos o desenho na seguinte posição:
Neste caso temos theta=0 e phi=0. Note que assim que começamos a movimentar a roda no sentido anti-horário (aumentar theta), o ponto P tem um decréscimo do seu valor no eixo x (em relação ao ponto C, obviamente!). Por isso a parcela de y nesta segunda equação tem valor negativo.
##Parte II - Somando os movimentos
Agora que temos C em função de O e P em função de C, somamos as parcelas para obtermos P em função de O. Assim obtemos:
Note que a nossa função paramétrica possui duas variáveis: theta e phi. Porém esses dois valores não são independentes, como você pode notar:
O que nos leva a:
Que substituindo na equação anterior temos:
Por fim temos a equação final, com uma variável (theta) e três parâmetros: Raio do círculo mairo (R) raio da roda menor (r) e raio do ponto onde a caneta é colocada (r').
Logo abaixo temos um script Python que gera os traços para esses parâmetros. Note que a função geradora recebe dois parâmetros extras: spins -> quantas voltas complestas será dada para fazer o desenho. resolution -> qual o incremento do angulo theta.
Para executar este script você precisa ter a biblioteca matplotlib instalada no seu Python.
Podemos traçar também usando qualquer software de traçar gráficos que aceite equações paramétricas. Aqui temos um exemplo usandor o KmPlot no Ubuntu Linux:
Parâmetros:
R: 5
r: 1.1
r': 1
theta: variando de 0 a 2pi10 (10 voltas complestas)
Aqui um exemplo usando o GraphPlot do Mac OSX:
R: 5 r: 1.1 r': 1
E por fim dois exemplos usando o script Python listado abaixo: