Objetivos:
- Enxergar a movimentação de agentes como um algoritmo
- Praticar algoritmos de movimentação simples usando cinemá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:
- Buscar (seek)
- Fugir (flee)
- Vagar (wander)
- Chegar (arrive)
Descrevemos um Agente (Agente.java
) por:
- Pose
- Posição
- Vetor 2-dimensional com as coordenadas do agente
- Orientação
- Um escalar (entre 0 e 2π) representando para onde o agente está olhando
- Posição
- Algoritmo de movimentação (comportamento)
- Cor
As principais classes do programa podem ser vistas no diagrama a seguir:
A movimentação acontece em dois passos:
- Passo de IA: Um algoritmo de movimentação (e.g., seek, wander) determina para onde o agente deve ir
- 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;
- Em cada frame de atualização:
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:
- 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
- Calcule a direção desejada
- Fuga: sentido contrário da busca
- Vagar:
- Agente sempre na velocidade tangencial máxima
- Direção sofre pequenas variações aleatórias a cada quadro
- Chegar: variação da Busca
- Determinar um pequeno "raio de satisfação"
- Parar assim que chegar no raio
- Quais são valores interessantes para a velocidade máxima?
- Algo entre 20 e 60 px/segundo
- 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
- 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)
- Cada
- Onde está a classe referente ao
Chegar
?- Ela não existe e você deve criá-la.
- Na classe
Cinematica.java
(a principal), no métodocreate()
, você deve instanciar, configurar e registrar um objeto do tipoChegar
para poder usar esse novo algoritmo.
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.