Skip to content

fegemo/cefet-games-cinematica

Repository files navigation

Prática: Movimentação Cinemática

Objetivos:

  1. Enxergar a movimentação de agentes como um algoritmo
  2. Praticar algoritmos de movimentação simples usando cinemática

Atividade Prática

Você deve começar usando o código do professor como ponto de partida para a atividade. Você deve implementar 3-4 algoritmos simples de movimentação, que usam conceitos de cinemática da física (posição, velocidade e, no máximo, aceleração constante). Os algoritmos são:

  1. Buscar (seek)
  2. Fugir (flee)
  3. Vagar (wander)
  4. Chegar (arrive)

Resultado Esperado

Background Teórico

Descrevemos um Agente (Agente.java) por:

  1. Pose
    1. Posição
      • Vetor 2-dimensional com as coordenadas do agente
    2. Orientação
      • Um escalar (entre 0 e 2π) representando para onde o agente está olhando
  2. Algoritmo de movimentação (comportamento)
  3. Cor

As principais classes do programa podem ser vistas no diagrama a seguir:

A movimentação acontece em dois passos:

  1. Passo de IA: Um algoritmo de movimentação (e.g., seek, wander) determina para onde o agente deve ir
  2. Passo de Física: Usamos integração de Euler para atualizar a posição do agente de acordo com o movimento do passo anterior (veja Pose.java:atualiza - isto já está implementado)
    • Em cada frame de atualização:
      posicao += velocidade * delta;
      orientacao += rotacao * delta;

O algoritmo de movimentação cinemático tem como:

  • Entrada: dados estáticos (posição, orientação do agente) e, opcionalmente, um alvo
  • Saída: um Direcionamento (steering) com um vetor velocidade linear e/ou escalar de velocidade angular

Os algoritmos que vamos implementar:

  1. Busca: agente recebe uma posição objetivo
    • Calcule a direção desejada
      • Considere a posição do objetivo e a posição do agente
    • Normalize o vetor direção, mas multiplique-o pela velocidade máxima
  2. Fuga: sentido contrário da busca
  3. Vagar:
    • Agente sempre na velocidade tangencial máxima
    • Direção sofre pequenas variações aleatórias a cada quadro
  4. Chegar: variação da Busca
    • Determinar um pequeno "raio de satisfação"
    • Parar assim que chegar no raio

FAQ

  1. Quais são valores interessantes para a velocidade máxima?
    • Algo entre 20 e 60 px/segundo
  2. Quais são os controles?
    • Botão ESQUERDO: cria novo agente na posição clicada, com o algoritmo de movimentação corrente
    • Botão DIREITO: define onde/quem é o alvo
    • Rodinha: zoom
  3. Como defino quem é o algoritmo corrente?
    • Cada AlgoritmoMovimentacao possui um nome (uma letra apenas) e uma tecla que o torna o algoritmo corrente. Basta pressioná-la. Elas são:
      • s: buscar (seek)
      • w: vagar (wander)
      • f: fugir (flee)
  4. Onde está a classe referente ao Chegar?
    • Ela não existe e você deve criá-la.
    • Na classe Cinematica.java (a principal), no método create(), você deve instanciar, configurar e registrar um objeto do tipo Chegar para poder usar esse novo algoritmo.

Entrega

Este trabalho deve ser entregue via Moodle como um link para o seu fork do repositório original, com a atividade feita.

Os exercícios desta aula prática serão corrigidos ao final do nosso horário. Assim que estiver pronto, chame o professor para que possa ver seu trabalho.

About

Ambiente para implementação de algoritmos de movimentação

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages