Question

J'ai un jeu sur lequel je travaille et qui contient des missiles à tête chercheuse. Pour le moment, ils se tournent simplement vers leur cible, ce qui donne un résultat plutôt stupide. Tous les missiles suivent la cible.

Je souhaite créer une saveur de missile plus meurtrière, qui visera le "point cible". au moment où il arrive et je suis un peu coincé et confus sur la façon de le faire.

Je suppose que je devrai déterminer où sera ma cible à l'avenir (une hypothèse de toute façon), mais je ne peux pas comprendre à quelle distance regarder. Il doit être basé sur la distance entre le missile et la cible, mais sur la cible en mouvement.

Mes missiles ont une poussée constante, combinée à une faible capacité de virage. L’espoir est qu’ils seront rapides et excitants, mais qu’ils se comportent comme une vache (c’est-à-dire mal pour les non-fans d’HitchHiker).

Quoi qu’il en soit, cela ressemblait à une sorte de problème amusant que Stack Overflow m’aide à résoudre, c’est pourquoi des idées ou des suggestions pour améliorer ou "plus de plaisir" les missiles seraient tous reçus avec gratitude.

L'intelligence pour les éviter ...

Était-ce utile?

La solution

Ce que vous proposez s'appelle "" Command Guidance "" mais il existe un moyen plus simple et meilleur.

La façon dont les vrais missiles le font généralement (tous ne se ressemblent pas) utilise un système appelé navigation proportionnelle. Cela signifie que le missile "tourne". dans le même sens que la ligne de visée (LOS) entre le missile et la cible tourne, à un taux de rotation "proportionnel" au taux LOS ... Cela fera ce que vous demandez, car lorsque le taux LOS est égal à zéro, vous êtes sur la bonne voie.

Vous pouvez calculer le taux de perte de visibilité en comparant simplement les pentes de la ligne entre le misile et la cible d’une seconde à l’autre. Si cette pente ne change pas, vous êtes sur une trajectoire de collision. s'il change, calculez le changement et tournez le missile selon une vitesse angulaire proportionnelle ... vous pouvez utiliser n'importe quelle métrique représentant la position du missile et de la cible.

Par exemple, si vous utilisez une constante de proportionnalité de 2 et que la ligne de vue se déplace vers la droite à 2 degrés / seconde, tournez le missile vers la droite à 4 degrés / seconde. LOS à gauche à 6 degrés / seconde, missile à gauche à 12 degrés / seconde ...

En 3-D, le problème est identique, sauf que le "changement de taux de perte de vue" (et le taux de retournement du missile qui en résulte) est lui-même un vecteur, c’est-à-dire qu’il a non seulement une magnitude, mais une direction (dois-je tourner le missile à gauche, à droite ou en haut ou à 30 degrés au-dessus de l'horizontal par rapport à l'horizontale, etc. ?? ... Imaginez, en tant que pilote de missile, que vous "définissiez les ailes" pour appliquer l'ascenseur ...

Missiles guidés par radar, qui "connaissent" le taux de fermeture. ajustez la constante de proportionnalité en fonction de la fermeture (plus la fermeture est haute, plus le missile tente de tourner rapidement), de sorte que le missile tourne de manière plus agressive dans les scénarios de fermeture élevée (lorsque le temps de vol est plus court) et moins agressif en fermeture basse (queue poursuit) quand il a besoin de conserver de l'énergie. D'autres missiles (comme Sidewinders), qui ne connaissent pas la fermeture, utilisent une valeur de proportionnalité constante et prédéterminée). FWIW, les sidewinders AIM-9 de l’ère vietnamienne utilisaient une constante de proportionnalité de 4.

Autres conseils

J'ai déjà utilisé cet article CodeProject - il contient de très belles animations pour expliquer les calculs.

"Mathématiques du ciblage et de la simulation d'un missile: du calcul à la formule quartique": http://www.codeproject.com/KB/recipes/Missile_Guidance_System.aspx

(également dans les commentaires au bas de cet article se trouve une référence à du code C ++ qui accomplit même tâche du wiki Unreal)

Consultez OpenSteer . Il a du code pour résoudre des problèmes comme celui-ci. Regardez 'steerForSeek' ou 'steerForPursuit'.

Avez-vous envisagé un retour négatif sur le changement de cap récent au fil du temps?

Les détails sont laissés comme un exercice.

Les suggestions sont tout à fait sérieuses: si la cible ne manoeuvre pas, cela devrait permettre une interception presque optimale. Et cela devrait converger même si la cible esquive activement.

Besoin de plus de détails?

Résoudre dans un espace à deux dimensions pour faciliter la notation. Prenez \ vec {m} comme étant l'emplacement du missile et le vecteur \ vec {t} comme étant l'emplacement de la cible. Le cap actuel dans la direction du mouvement par rapport à la dernière unité de temps: \ vec {h} = \ bar {\ vec {m} _i - \ vec {m} _i-1}} . Soit r le vecteur normalisé entre le missile et la cible: \ vec {r} = \ bar {\ vec {t} - \ vec {m}} . Le relèvement est b = \ vec {r} \ point \ vec {h} . Calculez le relèvement à chaque fois que vous cochez, et son changement, puis changez le cap pour minimiser cette quantité.

Les calculs sont plus compliqués en 3D à cause de la nécessité de trouver le plan d'action à chaque étape, mais le processus est le même.

Vous voudrez interpoler la trajectoire de la cible et du missile en fonction du temps. Recherchez ensuite les heures dans lesquelles les coordonnées des objets se situent dans les limites de l'erreur acceptable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top