If you're seeing this message, it means we're having trouble loading external resources on our website.

Se você está atrás de um filtro da Web, certifique-se que os domínios *.kastatic.org e *.kasandbox.org estão desbloqueados.

Conteúdo principal

Modelando a gravidade e o atrito

Agora, vamos tentar criar nossas forças mais próximas ao mundo real, aumentando a gravidade do último exemplo e introduzindo uma força de atrito.

Gravidade na Terra

Você deve ter notado algo muito impreciso nesse último exemplo. Quanto menor o círculo, mais rápido ele cai. Há uma lógica nisso; afinal, acabamos de dizer (de acordo com a segunda lei de Newton) que quanto menor a massa, maior é a aceleração. Mas não é isso que acontece no mundo real. Se você fosse que subir até o topo da Torre de Pisa e soltar duas bolas com massas diferentes, qual tocaria o solo primeiro? De acordo com a história, Galileo fez exatamente esse teste em 1589, e descobriu que elas caem com a mesma aceleração, tocando o solo no mesmo momento. E por quê? Como vamos ver mais adiante, a força da gravidade é calculada em relação à massa de um objeto. Quanto maior o objeto, maior a força. Assim, se a força é medida de acordo com a massa, ela é cancelada quando a aceleração é divida pela massa. Podemos implementar isso facilmente multiplicando nossa força de gravidade pela massa.

for (var i = 0; i < movers.length; i++) {
    var wind = new PVector(0.01, 0);
    var gravity = new PVector(0, 0.1 * movers[i].mass);
    movers[i].applyForce(wind);
    movers[i].applyForce(gravity);
    movers[i].update();
    movers[i].display();
    movers[i].checkEdges();
}
Embora os objetos agora caiam da mesma forma, como a força do vento é independente da massa, os objetos menores ainda aceleram mais rapidamente.
Compor forças vai nos levar longe. O mundo de ProcessingJS é um mundo de pixels, e você é o mestre. Então, o que você julgar apropriado para ser uma força deve ser uma força. Contudo, pode chegar um momento no qual você vai se perguntar: “Mas como tudo isso funciona?”
Abra qualquer livro de física de ensino médio e você vai encontrar diagramas e fórmulas que descrevem várias forças diferentes — gravidade, eletromagnetismo, atrito, tensão, elasticidade, e muitas outras. Ou então, dê uma olhada nas lições de física da Khan Academy. Nessa seção, vamos olhar para essas duas forças — atrito e gravidade. O que queremos não é dizer que o atrito e a gravidade são forças fundamentais que você sempre vai ter que usar em todos os seus programas em ProcessingJS. Ao contrário, queremos calcular essas duas forças como estudos de caso para o seguinte processo:
  • Compreender o conceito por trás de uma força
  • Decompor a fórmula da força em duas partes:
    • Como calculamos a direção da força?
    • Como calculamos a magnitude da força?
  • Traduzindo essa fórmula para um código em ProcessingJS que calcula um PVector para ser enviado através da função applyForce() de Mover.
Se pudermos seguir os passos acima com duas forças, se você um dia estiver Googlando “força nuclear fraca” às 3 da manhã, você vai ter a habilidade necessária para adaptar o que você encontrar para programas em ProcessingJS.
Lidando com as fórmulas
OK, vamos escrever a fórmula do atrito em um instante. Não é a primeira vez que vamos ver uma fórmula nesse curso; nós acabamos de terminar nossa discussão sobre a segunda lei de Newton, F=M×A​ (ou força = massa * aceleração). Nós não perdemos muito tempo com essa fórmula porque ela é simples. Contudo, o mundo lá fora é mais assustador. Basta dar uma olhada na equação de uma distribuição "normal", sobre a qual nós falamos (sem olhar para a fórmula) na introdução.
f(x,μ,σ)=1σ2πe((xμ)22σ2)
O que estamos vendo aqui é que as fórmulas gostam de usar um monte de símbolos (frequentemente letras do alfabeto grego). Vamos dar uma olhada na fórmula do atrito.
Atrito=µNv^
Se já faz algum tempo que você viu uma fórmula matemática ou física, há três pontos chave para abordarmos antes de seguir em frente.
  • Calcule o lado direito, atribua ao lado esquerdo. É exatamente como em um código! O que estamos fazendo aqui é calcular o lado direito da equação e atribuí-lo ao lado esquerdo. No caso acima, nós queremos calcular a força do atrito—o lado esquerdo nos diz o que queremos calcular e o lado direito nos diz como fazer isso.
  • Estamos falando sobre um vetor ou um escalar? É importante observar que, em alguns casos, estamos lidando com um vetor e, em outros, com um escalar. Por exemplo, nesse caso a força do atrito é um vetor. Podemos ver isso pela seta em cima da palavra "atrito." Ela tem magnitude e direção. O lado direito da equação também tem um vetor, como indicado pelo símbolo v^, que nesse caso corresponde ao vetor unitário de velocidade.
  • Quando símbolos estão próximos um do outro, significa que eles estão sendo multiplicados. A fórmula acima tem, na verdade, quatro elementos: -1, µ, N, e v^. Nós queremos multiplicá-los e ler a fórmula como: Atrito=µNv^

Atrito

Vamos começar com o atrito.
O atrito é uma força inibidora. Uma força inibidora é aquela com a qual a energia total de um sistema diminui quando um objeto está em movimento. Digamos que você está dirigindo um carro. Quando você aperta o pedal do freio, os freios do carro usam o atrito para diminuir o movimento dos pneus. A energia cinética (movimento) é convertida em energia térmica (calor). Sempre que duas superfícies entram em contato elas experimentam o atrito. Uma modelagem completa de atrito deve incluir casos separados para o atrito estático (um corpo em repouso sobre uma superfície) e atrito cinético (um corpo em movimento sobre uma superfície), mas para os nossos estudos, vamos observar apenas o caso do atrito cinético.
Aqui temos a fórmula para o atrito, junto com uma ilustração:
Uma ilustração de alguém descendo em um trenó, junto com a fórmula do atrito, Atrito =−1µN*v
Agora cabe a nós separar essa fórmula em dois componentes que determinam a direção e a magnitude do atrito. Com base no diagrama acima, podemos ver que o atrito aponta para a direção oposta da velocidade. De fato, essa é a parte da fórmula que diz 1v^, ou -1 vezes o vetor de unidade da velocidade. Em ProcessingJS, isso significaria pegar o vetor velocidade, normalizá-lo, e multiplicá-lo por -1.
var friction = velocity.get();
friction.normalize();
//  Vamos descobrir a direção da força de atrito
//  (um vetor unitário na direção oposta à velocidade).
friction.mult(-1);
Aqui, perceba dois passos adicionais. Primeiro, é importante fazer uma cópia do vetor velocidade, já que não queremos reverter a direção do objeto acidentalmente. Em segundo lugar, normalizamos o vetor. Fazemos isso porque a magnitude do atrito não está associada a quão rápido é movimento, e queremos começar com um vetor de atrito de magnitude 1, para que que ele seja facilmente escalado.
De acordo com a fórmula, a magnitude é μN. μ, a letra grega mu (pronunciada “mew” em inglês), é usada aqui para descrever o coeficiente de atrito. O coeficiente de atrito estabelece a intensidade de uma força de atrito para uma superfície em particular. Quanto maior ele for, mais forte o atrito; quanto menor, mais fraco o atrito. Um bloco de gelo, por exemplo, tem um coeficiente de atrito muito menor do que uma lixa, por exemplo. Já que estamos em um mundo fictício de ProcessingJS, podemos definir arbitrariamente o coeficiente com base no atrito que queremos simular.
var c = 0.01;
Agora a segunda parte: N. N refere-se à força normal, a força perpendicular ao movimento do objeto ao longo de uma superfície. Pense em um veículo viajando por uma estrada. O veículo emburra a estrada para baixo com a gravidade, e a terceira lei de Newton nos diz que a estrada empurra o veículo para cima. Essa é a força normal. Quanto maior a força gravitacional, maior a força normal. Como veremos na próxima seção, a gravidade está associada à massa, portanto um carro esportivo leve deve sofrer menos força de atrito do que um grande e pesado caminhão. Contudo, com o diagrama acima, no qual o objeto se move sobre uma superfície com uma angulação, calcular a força normal é um pouco mais complicado, porque ela não aponta para a mesma direção que a gravidade. Vamos precisar de um pouco de conhecimento sobre ângulos e trigonometria.
Todos esses detalhes são importantes; contudo, em ProcessingJS, uma simulação “boa o suficiente” pode ser feita sem eles. Podemos, por exemplo, fazer o atrito funcionar assumindo que a força normal sempre vai ter magnitude igual a 1. Quando entrarmos em trigonometria, na próxima seção, vamos lembrar de retomar essa questão e deixar nosso exemplo de atrito um pouco mais sofisticado. Portanto:
var normal = 1;
Agora que temos a magnitude e a direção do atrito, podemos juntar tudo…
var c = 0.01;
var normal = 1;
var frictionMag = c * normal;
var friction = movers[i].velocity.get();
friction.mult(-1);
friction.normalize();
friction.mult(frictionMag);
…e adicioná-lo ao nosso exemplo de “forças”, no qual vários objetos experimentam o vento, a gravidade, e agora o atrito:
Se você observar o programa em execução por um tempo, você vai perceber que os círculos se movem cada vez menos, e tendem a ficar em torno de uma área. Uma vez que o atrito empurra continuamente o objeto na direção oposta ao movimento, o objeto diminui de velocidade constantemente. Isso pode ser tanto uma técnica útil como um problema, dependendo do nosso objetivo.

Este curso "Natural Simulations" é um derivado do "The Nature of Code" por Daniel Shiffman, usado sob a Creative Commons Attribution-NonCommercial 3.0 Unported License.

Quer participar da conversa?

Nenhuma postagem por enquanto.
Você entende inglês? Clique aqui para ver mais debates na versão em inglês do site da Khan Academy.