Pergunta

Eu tenho um jogo que eu estou trabalhando em que mísseis teleguiados na mesma. No momento, eles simplesmente virar-se para o seu alvo, o que produz um resultado olhando um pouco mudo, com todos os mísseis seguir o alvo ao redor.

Eu quero criar um sabor mais mortal de míssil que visará a onde o alvo "será" no momento em que ele fica lá e eu estou ficando um pouco preso e confuso sobre como fazê-lo.

Eu estou supondo que vai precisar de trabalhar para fora onde o meu objectivo será em algum momento no futuro (um palpite de qualquer maneira), mas eu não posso colocar minha cabeça em torno de como muito à frente para olhar. Ele precisa ser baseada em quão longe o míssil está longe do alvo, mas o alvo é também movimento.

As minhas mísseis têm um impulso constante, combinado com uma fraca capacidade de transformar. A esperança é que eles vão ser rápido e emocionante, mas boi como uma vaca (ou seja, mal, para os fãs não carona lá fora).

De qualquer forma, parecia um tipo de problema divertido para Stack Overflow para me ajudar a resolver, por isso quaisquer ideias ou sugestões sobre melhores mísseis ou "mais divertido" todos seriam recebidas com gratidão.

Em seguida será AI para esquivando-los ...

Foi útil?

Solução

O que você está sugerindo é chamado de "Orientação de Comando", mas há uma maneira mais fácil e melhor.

A maneira que os mísseis reais geralmente fazê-lo (Nem todos são iguais) está usando um sistema chamado proporcional navegação. Isto significa que os mísseis "voltas" no mesmo sentido que o line-of-sight (LOS) entre o míssil e o alvo está se transformando, a uma taxa de turn "proporcional" à taxa LOS ... Isso vai fazer o que você é pedindo como quando a taxa LOS é zero, você está em rota de colisão.

Você pode calcular a taxa LOS por apenas comparando as encostas da linha entre misile e alvo de um segundo para o outro. Se essa inclinação não está mudando, você está em rota de colisão. se ele está mudando, calcule a mudança e transformar o míssil por uma taxa angular proporcional ... você pode usar qualquer métricas que representam posição de mísseis e de destino.

Por exemplo, se você usar uma constante de proporcionalidade de 2, eo LOS está se movendo para a direita a 2 graus / seg, gire o míssil para o direito a 4 graus / seg. LOS à esquerda na 6 graus / seg, de mísseis para a esquerda em 12 graus / seg ...

Em 3-d problema é idêntico, exceto a "Mudança em LOS Rate", (e taxa de turn míssil resultante) é em si um vetor, ou seja, tem não só uma magnitude, mas uma direção (Do I virar a esquerda míssil , direita ou para cima ou para baixo ou 30 graus acima da horizontal para a direita, etc ?? ... imagine que, como piloto de mísseis, onde você vai "definir as asas" para aplicar o elevador ...

Radar mísseis guiados, que "conhece" a taxa de fechamento. ajustar a constante de proporcionalidade com base no fechamento (quanto maior o fechamento mais rápido as tentativas de mísseis para ligar), para que o míssil vai virar mais agressivamente em cenários de alta de fechamento, (quando o tempo de voo é menor), e menos agressiva em baixa fechamento (perseguições da cauda) quando ele precisa para conservar energia. Outros mísseis (como Sidewinders), que não sabem o fechamento, use um valor constante de proporcionalidade pré-determinado). FWIW, era do Vietnã AIM-9 Sidewinder usou uma constante de proporcionalidade, de 4.

Outras dicas

Eu usei este artigo CodeProject antes -. Ele tem alguns realmente agradáveis ??animações para explicar a matemática

"A Matemática do Segmentação e Simulação de Mísseis: De Cálculo à Fórmula Quartic": http://www.codeproject.com/KB/recipes/Missile_Guidance_System.aspx

(também, escondido nos comentários na parte inferior do mesmo artigo é uma referência a algum código C ++ que realiza a mesma tarefa do wiki Unreal)

Dê uma olhada OpenSteer . Tem código para resolver problemas como este. Olhada 'steerForSeek' ou 'steerForPursuit'.

Você já considerou feedback negativo sobre a recente mudança de rolamento sobre a mudança de tempo?

Detalhes deixado como um exercício.

As sugestões é completamente sério: se o alvo não manobrar este deve obter uma quase ideal de interceptação. E deve convergir mesmo se o alvo está esquivando-se ativamente.

Precisa de mais detalhes?

Resolver em um espaço bidimensional para a facilidade de notação. Tome \vec{m} para ser o local do míssil e vector \vec{t} Para ser a localização do alvo. O título corrente no sentido de movimento ao longo da última unidade de tempo: \vec{h} = \bar{\vec{m}_i - \vec{m}_i-1}}. Seja r o vector normlized entre o míssil e o alvo: \vec{r} = \bar{\vec{t} - \vec{m}}. O rolamento é b = \vec{r} \dot \vec{h} Calcular o rolamento em cada instante de tempo, e a mudança dos mesmos, e mudança de proa para minimizar essa quantidade.

A matemática é Harrier em 3d por causa da necessidade de encontrar o plano de ação em cada etapa, mas o processo é o mesmo.

Você vai querer interpolar a trajetória de ambos o alvo eo míssil como uma função do tempo. Em seguida, olhar para os tempos em que as coordenadas dos objetos estão dentro de algum erro aceitável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top