Inscrit le: 13 Jan 2009 Messages: 550 Sujets: 47 Spécialité en worldedit: La partie déclencheurs sauf le GUI.
Posté le: 27/07/12 03:05 Sujet du message: Calculer l'interception
Bonjour bonjour !
J'ai un problème qui relève bien plus des maths que des déclencheurs.
Je dispose d'une unité A se déplaçant tout droit suivant un certain angle et à vitesse constante.
Une autre unité B doit lancer un missile C se déplaçant également tout droit et à vitesse constante, pour atteindre l'unité A.
La question est : à un certain moment comment déterminer s'il est possible que B puisse atteindre A avec un missile, et, si dans le cas où c'est possible, quel est l'angle du lancer à effectuer ?
Cela relève d'équations mathématiques que je n'arrive pas à résoudre... :/ _________________
Alors tu cherche à calculer le vecteur d'interception de l'unité A.
Angle + vitesse => vélocité qui se modélise par un vecteur.
L'unité A se trouve actuellement à la position PosA avec une vélocité VelA.
L'unité B se trouve à la position PosB.
L'unité C se trouve à la position PosB également.
Nous recherchons la vélocité de C que l'on notera VelC, plus précisément on connait sa vitesse et on cherche son angle.
Premièrement tant que la vitesse de C est supérieure à celle de A on est assuré qu'il pourra le toucher, peu importe le temps que cela mettera, mais je suppose que ce sera le cas mais que tu veux limiter le temps nécessaire à toucher.
On va considérer X le point d'interception entre le C et A. Dans le cas où cela entre en collision on peut écrire.
X = PosA + VelA * T
X = PosB + VelC * T
T étant le temps nécessaire à la rencontre, il est le même pour les deux vu qu'on veut que les deux soit au point X au même moment.
On peut donc écrire PosA + VelA * T = PosB + VelC * T
L'un des problèmes que l'on peut voir ici c'est que l'on a deux variables (l'angle de C et le Temps) et qu'il nous faut définir l'une de celle-ci plus ou moins arbitrairement afin de déterminer l'autre. C'est la remarque que l'on s'était fait au début c'est que peu importe le temps C pourrait toucher A, hors on veut que l'on temps reste raisonnable, de plus j'imagine que l'on aimerait que A ait un minimum de temps.
Tu peux aussi déterminer le meilleur T à partir des droites et des vitesses, mais disons que je n'ais pas que cela à faire non plus ^^.
Pour savoir si l'unité doit tirer je te conseil de tout simplement déterminer une distance entre A et B à partir de laquelle B tire (c'est ainsi dans la plupart des jeux). Pour T tu as plusieurs choix, tu peux déterminer un interval et le faire varier en fonction de la distance entre A et B.
Pour trouver VelC cela devient:
VelC = (PosA - PosB) / T + VelA
Vu que l'on connait la vitesse de VelC, soit NC la normale (pour l'angle) et VC la vitesse.
VelC = NC * VC
On a donc
NC = ((PosA - PosB) / T + VelA) / VC
Et voilà on obtient l'angle de tir du missile. _________________
Inscrit le: 13 Jan 2009 Messages: 550 Sujets: 47 Spécialité en worldedit: La partie déclencheurs sauf le GUI.
Posté le: 28/07/12 09:51 Sujet du message:
Tout d'abord merci de ton aide Ayane.
La vitesse du missile ne sera pas forcément supérieure à celle de l'unité A, elle peut être inférieure.
Voici comment j'ai procédé :
Déja je n'en ai pas parlé auparavant, mais l'unité B aura une portée de tir maximale.
Je veux donc trouver le T idéal. Pour cela il me faut un intervalle, le minimum c'est facile : 0.
Pour trouver le T maximum je trouve le point d'intersection entre la direction de l'unité A et le cercle de centre B et de rayon portée maximum, qui est placé vers où va l'unité A. Jusque là ça va.
J'ai donc un T minimum et un T maximum.
Pour trouver le T idéal il m'a paru être une bonne idée de procéder par dichotomie. Je regarde la distance entre l'unité A et le missile (sachant que celui-ci se dirige vers l'emplacement de l'unité A au temps donné) aux temps Tmin, Tmilieu et Tmax. Si la différence entre DistTmin et DistTmilieu est inférieure à celle entre DistTmilieu et DistTmax, je recommence le calcul en remplaçant Tmax par Tmilieu, sinon je le refais en remplaçant Tmin par Tmilieu. Et je recommence jusqu'à obtenir une distance entre l'unité A et le missile suffisamment basse.
Ca fonctionne à peu près lorsque la vitesse du missile est suffisamment plus élevée que celle de l'unité A, mais lorsque elle est inférieure c'est catastrophique, l'unité B vise très mal ^^.
Une autre solution pourrait être de faire le calcul pour toutes les valeurs entre 0 et Tmax avec un certain écart, mais ça ferait vraiment trop de calcul :/.
Je ne vois pas d'autre solution pour l'instant. _________________
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum