Matemática para games – Distância entre dois pontos

Pretendo com este post e outros que virão, tentar explicar conceitos “básicos” da matemática, mas que são fundamentais para qualquer desenvolvedor de jogos. E para começar vamos falar de distância.

Antes de mais nada, porque devemos nos preocupar com distâncias? Bom, existem várias aplicações para ela na área de games:

  • saber a distância de um ponto ao outro;
  • encontrar o inimigo mais próximo;
  • calcular colisões;
  • verificar se o clique/toque do jogador foi próximo ao alvo.
 Blank Flowchart - New Page  Blank Flowchart2 - New Page

Para não complicar muito, vamos ignorar a teoria da relatividade e espaço-tempo e considerar que a menor distância entre dois pontos é uma reta. E para descobrir isso vamos voltar no tempo, na época da escola, e resgatar o antigo teorema de Pitágoras que diz o seguinte: “a soma dos quadrados dos catetos é igual ao quadrado da hipotenusa”.

h² = (b.x – a.x)² – (b.y – a.y)²
h = √(b.x – a.x)² – (b.y – a.y)²

Codificando chegaremos a algo semelhante a isso:

Caso você queira apenas comparar duas distâncias e economizar um pouco do processamento, podemos deixar a raiz quadrada de lado e elevar a distância a ser comparada na potência de dois:

Abaixo segue um exemplo usando o calculo da distância para ver se clicamos na área do circulo para selecionar o objecto e também para verificar se ambos estão colidindo ou não. Selecione a nave e arraste ela.

Como de costume o código está no nosso Github. Caso tenha alguma dúvida, crítica ou sugestão guarde pra você deixe seu comentário (:

  • Guilherme Paz

    Muito legal a iniciativa! Vemos muitos ensinamentos legais sobre game dev, mas poucos são voltadas a conceitos matemáticos básicos que usamos frequentemente. Não conseguir calcular o ângulo de uma câmera pode te frustar bastante!
    Espero ver mais posts nessa pegada! Abraço! 🙂

    • Maicon Feldhaus

      Cara, muito obrigado! Comentários assim me inspiram ainda mais a fazer outros posts (:

  • Pingback: Lune Game Studio | Matemática para games – Bézier()