Matemática para games – Ângulos

Os ângulos estão conosco desde o colegial e apesar de ser uma palavra comum no nosso vocabulário, são um pouco difíceis de se explicar, mas resumindo, é essa “abertura” formada por duas semirretas de mesma origem.

  • rotacionar um objeto
  • ângulo de visão
  • ângulo de tiro

Medidas

  • graus – O mais “popular” e legível para nós, onde o círculo é dividido em 360 partes;
  • radianos – Leva em consideração o comprimento da circunferência, que é 2π (pi). É a medida utilizada nos cálculos matemáticos, e portanto, mais econômica em questão de processamento.

degree_radian

Funções Trigonométricas

functions

Funções Trigonométricas Inversas

functions_inverse


Agora, vamos codificar um pouco. Vou apresentar duas funções que considero bem úteis para o desenvolvimento de jogos, principalmente 2D.

A primeira retorna o ângulo entre dois vetores (x,y). Como, por exemplo, o ângulo entre um personagem e a posição do mouse. Aqui usamos a função Atan2, pois ela leva em consideração todos os quadrantes, retornando valores entre 180º e -180º, diferente do Atan que trabalha apenas com dois quadrantes, retornando valores entre 90º e -90º.

A segunda retorna a direção do ângulo (em radianos), convertendo ele em um vetor. Podemos multiplicar esse valor retornado por uma velocidade e mover algo na direção desejada, como por exemplo os tiros.

Abaixo, segue um exemplo usando essas funções. Use o WASD para movimentar o personagem e o mouse para mirar e atirar:

O projeto completo está no Github.

  • TRUST ME, I’M AN ENGINEER

    Caras,

    Ótimo artigo! Simples e objetivo 🙂
    Gostei muito do artigo por que eu preciso aprender mais sobre matemática e tudo é bem vindo, Seja avançado ou básico..
    Nos meus tempos de Web e desenho em canvas, radianos faziam parte do meu café e foi muito prazeroso “brincar” com isso..
    Há uma carência de profissionais da área de jogos que tenham um conhecimento razoável em fórmulas matemáticas e algoritmos que exijam essa “skill” xD

  • Pingback: Matemática para programadores de Jogos: Vetores e Ângulos |()

  • Pingback: Lune Game Studio | Visibilidade 2D()

  • Diego R. Santos

    Cara, simples e objetivo, muito bom, Obrigado por compartilhar o conhecimento