Pular para o conteúdo
murad.guide

Programação Criativa

Capítulo 19

Forças e aceleração

2 min de leitura 373 palavras 1 gravura

Texto e demos originais do volume. Força muda aceleração; aceleração muda velocidade; velocidade muda posição.

Trabalhe sobre uma cópia da pasta inicio do exemplo correspondente. Leia, digite, mude uma coisa, preveja, recarregue e confira. A referência completa fica na raiz da pasta do exemplo, no pacote anexo.

O que você pratica

Forças e aceleração

Leitura do movimento

A bolinha ganha vento e gravidade.

Erro comum: somar força direto na posição — pula a física em camadas.

Aplicar forças

No início, some vento e gravidade em acc.

acc.add(vento);
acc.add(grav);
vel.add(acc);
pos.add(vel);
acc.mult(0);

Pare e experimente. Zere acc depois de integrar.

Chão

Ao tocar o fundo, inverta e amorteça vy.

Não publique exercícios com dados reais. Conteúdo fictício de Recife.

Como o exemplo desta etapa funciona

A referência desta etapa reúne index.html, sketch.js, styles.css. Abra o resultado pronto, localize o trecho que produz forcas e aceleracao e só então compare com inicio. Os dois diretórios são independentes: você pode errar, restaurar e repetir sem buscar arquivos de outro capítulo.

Leitura do resultado

Observe primeiro o que permanece parado e o que responde a uma ação. Depois altere um único número, cor, coordenada ou condição. Antes de recarregar, escreva o efeito esperado. Essa previsão separa uma mudança compreendida de uma tentativa ao acaso.

Diagnóstico guiado

Se a cena sumir, confira a primeira mensagem do Console e o caminho dos arquivos. Em SVG, revise viewBox, atributos e ordem das formas. Em p5.js, confirme a biblioteca local e se setup e draw foram escritos corretamente. Em Canvas ou WebGL, verifique o contexto e os limites numéricos antes de mudar outra coisa.

Critério de avanço

Avance quando conseguir descrever a cena, modificar um parâmetro com previsão e restaurar a referência sem copiar arquivos de uma etapa posterior.

Atividades

  1. Ordem certa pos/vel/acc?
  2. createVector cria?
  3. Amortecer evita?

Respostas comentadas

Só abra depois de tentar.

Atividade 1. forças→acc→vel→pos; zerar acc.

Atividade 2. Vetor 2D do p5.

Atividade 3. Energia infinita no quique.

Exemplo deste capítulo: pacote de exemplos/19-forcas/.

O arquivo completo

Referência do exemplo 19-forcas, reproduzida aqui para que você possa conferir sem sair da página.

index.html

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Forças — Laboratório da Luz</title>
  <link rel="stylesheet" href="styles.css">

</head>
<body>
  <a class="skip" href="#conteudo">Ir ao conteúdo</a>
  <header>
    <p class="tag">Laboratório da Luz · Recife</p>
    <h1>Forças</h1>
  </header>
  <main id="conteudo">
<p class="dica">Aceleração acumula forças; zere acc no fim do quadro.</p>
<div class="stage" id="canvas-host"></div>
<p class="dica">Se o desenho não aparecer ao abrir o arquivo direto, sirva <code>curso/</code> em 127.0.0.1.</p>
  </main>
  <footer>
    <p>Conteúdo fictício para estudo local. Não publique dados reais.</p>
  </footer>
  <script src="../../lib/p5.min.js"></script>
  <script src="sketch.js"></script>
</body>
</html>

sketch.js

let pos, vel, acc;
function setup() {
  createCanvas(480, 280).parent("canvas-host");
  pos = createVector(60, height / 2);
  vel = createVector(1.5, 0);
  acc = createVector(0, 0);
}
function draw() {
  background(244, 240, 232);
  const vento = createVector(0.05, 0);
  const grav = createVector(0, 0.15);
  acc.add(vento);
  acc.add(grav);
  vel.add(acc);
  pos.add(vel);
  acc.mult(0);
  if (pos.y > height - 20) { pos.y = height - 20; vel.y *= -0.85; }
  if (pos.x > width - 20) { pos.x = 20; vel.x *= 0.9; }
  fill(196, 92, 38);
  circle(pos.x, pos.y, 36);
}