Você está na página 1de 7

Simulador de Interações Gravitacionais entre objetos

Introdução ao Scratch.
Esse é um programa baseado na linguagem de programação Scratch, que
funciona no modelo de fluxograma, como exemplificado na Figura 1. Este bloco de
funcionamento dita uma ação em que quando o programa for iniciado (quando a
bandeira verde, botão de inicialização, for clicada), se a variável “a” for igual a 10,
então o ator dirá “Hello!”

Figura 1.

Atores são personagens diferentes que obedecem aos blocos que são colocados
dentro deles. Por exemplo, se eu tiver 2 bolas, uma amarela e outra azul, com códigos
que digam “mova 10 passos para cima” e “mova 10 passos para baixo” respectivamente,
quando eu começar a simulação a bola amarela vai subir, enquanto a azul vai descer. Na
Figura 2 apresenta se o layout do Scratch. Existem outras funcionalidades, porém elas
não são relevantes. No campo de atores estão todos os atores do programa, como se
pode ver, o ator “Ball” está selecionado, então tudo que aparecer no Espaço de Código
será referente ao ator “Ball”. Para se escrever um comando, se tira um bloco do campo
“Blocos de código” e coloca o no Campo de Código. A Tela de Visualização mostra o
que o código está fazendo, enquanto as informações de cada ator (dependendo de qual
foi escolhido) estão disponíveis abaixo da tela. Os botões “run” e “stop” começam e
param o programa.
Propriedades básicas do programa.
Ao iniciar o programa, você notará que existem 4 atores. O “Sprite 1” é um
corpo dinâmico ao qual foram aplicadas as propriedades necessárias para o movimento.
O “Sprite 2” é um corpo fixo, ao qual não foram aplicadas forças. “G” é uma
demonstração fora de escala do vetor da aceleração da gravidade no Sprite 1, ele mostra
a direção e o sentido da aceleração imposta sobre esse corpo. “V” é uma demonstração
fora de escala do vetor da velocidade do Sprite 1.
O programa tem 13 variáveis no total. Falarei de cada uma delas conforme
avanço sobre o funcionamento do programa.

1.Gravidade
A força da gravidade só é aplicada sobre o Sprite 1 em prol de simplicidade.
Sendo que o único objeto presente no universo além do Sprite 1 é o Sprite 2, a direção e
o sentido dessa força apontam para o Sprite 2. O módulo dessa aceleração é expresso
pela fórmula:

Em que Xpos2 e Ypos2 são iguais às posições do Sprite 1 na abcissa e na


ordenada, respectivamente, e XposS e YposS equivalem às posições do Sprite 2 na
abcissa e na ordenada, respectivamente. Essa fórmula é uma derivação da Lei da
Gravitação Universal, sendo que as massas dos objetos são descartadas, a constante
gravitacional é multiplicada por 10¹¹ (para facilitar a manipulação da força), e a
distância é substituída pela fórmula da distância entre dois pontos.

A direção e o sentido desse módulo são um pouco mais complicados de calcular devido
a um problema que o Scratch tem com ângulos: o seu sistema. O sistema de ângulos do
Scratch funciona de acordo com o diagrama da Figura 3.

Figura 3

O problema com esse sistema é que todas as fórmulas que trabalham com
trigonometria dão valores incompatíveis quando entram no 3º ou 4º quadrante: as
tangentes no 3º e 4º quadrantes são positivas e negativas, respectivamente, porém, no
modelo do Scratch, os números nesses quadrantes são negativos e positivos, então, a
linguagem pega o módulo da tangente, passa para graus, e negativa o valor, exemplo: a
tangente de 135° é igual a -1, então o computador passa para módulo, que nos dá +1, a
tangente de 45°, depois disso ele negativa o valor, dando -45°, quando na verdade o
valor deveria ser 135°. Entendido esse problema, a solução que eu encontrei foi na
Teoria dos Conjuntos. A fórmula básica para encontrar o ângulo que indica a direção e o
sentido do vetor é essa:

Em que “AnguloG” é o ângulo desejado e Xpos2, XposS, Ypos2, YposS são as


coordenadas dos objetos como previamente descritas. Porém, como anteriormente
discutido, quando nos quadrantes 3 e 4, os valores descritos pela fórmula são errôneos,
portanto, é aplicada a seguinte relação corretora:

Se:

Então:
Se:

Então:

Para todos os outros casos:

Simplificadamente, essas fórmulas corrigem o problema nos quadrantes 3 e 4


por adicionar 180 graus ao resultado toda vez que elas detectarem que o resultado deve
acabar nesses quadrantes. Elas fazem isso basicamente por detectarem se os catetos
oposto e adjacente do triângulo trigonométrico virtual são positivos ou negativos, por
exemplo: caso sejam ambos negativos, a tangente pertence ao terceiro quadrante.

2. Velocidade
O cálculo da velocidade é o mais complexo do programa (em especial o cálculo
do sentido e direção). Primeiro, usa se a lei dos cossenos para calcular o módulo da
velocidade:

Em que v é a velocidade do objeto, g é o módulo da gravidade e AnguloV e


AnguloG são as direções e sentidos dos vetores expressos em ângulos. Vale notar que
os v dentro da raiz funcionam como V 0. Já que a fórmula está sendo usada várias vezes
por segundo, os V dentro da raiz agem como o v anterior, enquanto o fora da raiz age
como o novo v. Pense nisso como a n+1=a n+ 1, em que o valor se atualiza a cada ciclo.

O cálculo do vetor da velocidade é feito a partir de uma equação vetorial


algébrica em que se decompõem as partes horizontais e verticais, somando-as e tirando
a tangente do resultado. A fórmula básica é essa:
De novo aplica-se a propriedade a n+1=a n+ 1, em que os valores dentro da
equação são postos a priori. Porém, encontram se 2 problemas nesse cálculo: a natureza
falha do sistema de ângulos do Scratch e os valores da tangente de 90° e 180°. O
primeiro problema já conhecemos: quando nos quadrantes 3 e 4 os valores das
tangentes, cossenos e senos estão errados, porém, quando a tangente atinge 90° e 180°
ela tende ao infinito. O Scratch não foi programado para calcular valores inteiros muito
altos, então quando o resultado dessa equação se aproxima de 90° ou 180°, os valores
travam a simulação. Para resolver os dois problemas, foi empregada uma técnica: rodar
4 equações simultaneamente, cada uma adaptada para um quadrante diferente, e usar os
valores de apenas uma nos momentos certos. As fórmulas são as seguintes:

Sendo que cada uma delas é uma adaptação da original, em que se gira o plano
convenientemente para não se atingir os valores em que a tangente tente ao infinite e,
simultaneamente, não atingir os quadrantes 3 e 4, matando 2 pássaros com uma só
pedra. Os diagramas a seguir mostram uma visualização dos ângulos em que a tangente
é um valor correto (em azul), ângulos em que a tangente é um valor incorreto (em
vermelho), e os valores limites em que a tangente é infinita (em amarelo):
Para conseguir um círculo completo em que todos os ângulos dão valores
corretos, utiliza-se uma fórmula por vez de acordo com a necessidade. O diagrama a
seguir mostra a utilização das diferentes fórmulas de acordo com o valor de AnguloV,
sendo que amarelo é a fórmula 1, cinza é a fórmula 2, azul é a fórmula 3 e vermelho é a
fórmula 4.

3.Movimento
Por fim, o movimento do Sprite 1 é baseado na decomposição do vetor
AnguloV, de acordo com as fórmulas:

4.Outras variáveis
As outras variáveis que você encontrará são meramente estéticas ou úteis para a
visualização do programa, como a variável “dis”, que calcula a distância entre os dois
objetos.

5.O problema
Como eu já te disse, por algum motivo a cada órbita que o Sprite 1 completa em
torno do Sprite 2, a energia do Sprite 1 é maior do que a inicial (a velocidade inicial
pode ser mudada em um dos primeiros blocos do ator v). Essa mudança de energia pode
ser observada pelo tamanho da órbita, que fica cada vez maior. Eu não tenho nenhuma
hipótese ainda, mas andei observando que o acréscimo da energia é maior quando o
Sprite 1 está mais perto do Sprite 2, ou quando a gravidade é maior. Outra observação é
que quando a velocidade inicial é colocada em 0, o Sprite 1 permanece imóvel, como se
a velocidade estivesse anulando a aceleração da gravidade, e o vetor velocidade aponta
para o exato inverso do vetor gravidade, a não ser que a direção e o sentido do vetor
estejam apontados na direção geral do Sprite 2 quando se inicie a simulação: nesse caso,
a simulação fará como deveria ser, e o objeto irá lentamente ser atraído pelo Sprite 2.

Se você achar a resposta, por favor me mande um e-mail o mais rápido possível,
e claro, obrigado por dar um pouco de atenção a esse projeto.

P.S. Eu sei que você é secretamente o Doutor House, então use a sua famigerada
inteligência para resolver o problema ao invés de cumprir suas horas de clínica.

Você também pode gostar