IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XNA/Monogame Discussion :

Problème dans un calcul de trajectoire


Sujet :

XNA/Monogame

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Problème dans un calcul de trajectoire
    Bonjour à tous,

    J'ai un petit problème que je n'arrive pas résoudre alors que je suis sûr que la solution est simple. Pourtant je n'y arrive pas, il faut avouer que les maths n'ont jamais été mon point fort...

    Pour l'instant, je dispose d'un pion et j'aimerai faire en sorte qu'il puisse tirer des projectiles avec une trajectoire rectiligne.

    Les informations dont je dispose sont : la position X/Y (suivant l'axe par défaut (0,0) coin haut gauche), et l'angle de tir en radian.

    Voici mon code pour l'instant, il marche presque comme je le souhaite... à un détail près. Si je tire avec un angle proche de pi/2 ou -pi/2, les projectiles sont beaucoup plus rapides que si je tire avec un angle plus petit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if ((direction < -1.6 && direction > -3.8)|| (direction > 1.6 && direction < 3.8))
                    vitesse = -10;
                else
                    vitesse = 10;
     
                float largeur = position.X + vitesse;
                float tangente = (float)Math.Tan((double)direction);
                float hauteur = vitesse * tangente;
                position.Y = position.Y + hauteur;
                position.X = largeur;
    Ayant réfléchis pas mal de temps dessus, je crois que le problème vient du fait que mon calcul tan(angle) retourne une valeur extrêmement grande étant donné que je me base sur un X constant (côté adjacent) et que l'angle est quasiment à 90°. Par conséquent, la valeur du côté opposé est aussi extrêmement grande. La solution serait de se baser sur un X non constant, mais tous mes autres calculs sont basés là-dessus... Donc je ne vois pas trop de solution.

    Je suis sûr que ce problème est très courant, mais je n'ai pas trouvé de réelles solutions sur internet (google). Est-ce quelqu'un saurait comment résoudre mon problème ?

    PS : j'ai entendu dire qu'il fallait utiliser Vector2.Normalize(ref Vector2, out Vector2). Mais lorsque je l'utilise, mes projectiles font n'importe quoi.

    Bonne journée à tous et merci de m'avoir lu.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    Je ne suis pas sur d'avoir tout compris mais quand on observe la représentation graphique de la fonction tangeante on voit clairement que la courbe devient presque verticale a l'aproche de pi/2 :



    il y a surement un lien

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 815
    Points : 218 179
    Points
    218 179
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    Personnellement, je n'aurais pas utilisé le Tan pour faire ce calcul là.
    En fait, de votre angle, il faut déterminé une direction ( que l'on ajoutera à chaque tour de la boucle principale à la position ( avec un truc tout bête du genre position += direction )
    Bref, la direction est un Vector ( donc 3 coordonnée si en 2D, 3 si en 3D )

    Pour le calcul du vecteur, il faut juste, à partir de l'angle, trouver x et y
    Je crois ( mais il faut vérifié ( pas besoin d'un niveau de math hors du commun ) ) que cela donne un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dir.x = Math.Cos(angle);
    dir.y = Math.Sin(angle);
    et après, à chaque update, on ajoute la direction à la position. On peut même integré une notion de vitesse

    J'espère avoir été assez clair
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre régulier
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 32
    Points : 93
    Points
    93
    Par défaut
    Personnellement je préfère précalculé les trajectoire et stocker les résultats dans un vecteur de point. Cela me permet d'effectuer des post-verification sur la trajectoire. Je trouve personnellement que c'est plus simple ainsi.
    Mais ce n'est que mon avis.

Discussions similaires

  1. problème dans le calcul d'exponentiation
    Par nant44 dans le forum MATLAB
    Réponses: 5
    Dernier message: 10/07/2009, 12h45
  2. [AS2] problème d'utilisation d'une variable number dans un calcul
    Par Mosler dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 12/06/2008, 22h44
  3. Problème Formule dans Colones Calculées
    Par vds2302 dans le forum SharePoint
    Réponses: 2
    Dernier message: 04/06/2007, 09h14
  4. Problème dans le calcul d'éléments d'un tableau
    Par vidocq dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/04/2006, 14h14
  5. Problème dans le calcul des normales moyennes,
    Par MaxPayne dans le forum OpenGL
    Réponses: 1
    Dernier message: 12/04/2005, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo