Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=1ea7f02d636bf2d1e39c3230086a0bd1Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Calculer l'interception

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Max
Floodeur prématuré


Inscrit le: 13 Jan 2009
Messages: 550
Sujets: 47
Spécialité en worldedit: La partie déclencheurs sauf le GUI.


MessagePosté le: 27/07/12 03:05    Sujet du message: Calculer l'interception Citer

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... :/
_________________
Maximaxou@northrend

Projet Max Escape Creation (éditeur d'escapes : mazes/slides) : http://max.slid.free.fr/maxEscapeCreation/
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Ayane (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 27/07/12 08:35    Sujet du message: Citer

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.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Max
Floodeur prématuré


Inscrit le: 13 Jan 2009
Messages: 550
Sujets: 47
Spécialité en worldedit: La partie déclencheurs sauf le GUI.


MessagePosté le: 28/07/12 09:51    Sujet du message: Citer

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.
_________________
Maximaxou@northrend

Projet Max Escape Creation (éditeur d'escapes : mazes/slides) : http://max.slid.free.fr/maxEscapeCreation/
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
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


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com