Partage
  • Partager sur Facebook
  • Partager sur Twitter

Coordonnées et direction

Sujet résolu
    18 septembre 2011 à 15:11:41

    Bonjour amis Zéros.

    Je développe actuellement une petite application, et me retrouve face a ce qu'il conviendrait d’appeler une impasse (du moins pour moi ^^ )
    Mon problème reste cependant relativement simple.

    Je possède un objet, qui se déplace dans l'espace a une vitesse données. Simplifions le a sa plus simple expression:
    public float posX;
    public float posY;
    public float vitesseX;
    public float vitesseY
    

    Ainsi a chaque "tour" la position en X est incrémenté de vitesseX. Il en vas de même pour la position en Y.

    Cela fonctionne parfaitement (encore heureux). J'ai donc décidé d'ajouter une fonctionnalité un peu plus poussée. Je veux pouvoir dire a mon objet "d'aller vers" un point. Cependant, si il dépasse ce point, il ne change pas de direction.
    J'ai effectué ceci avec une méthode ressemblant a ceci:

    public void goTo(float posX,float posY)
    {
    vitesseX = (posX - this.posX)/15;
    vitesseY = (posY - this.posY)/15;
    
    }
    

    Et c'est la que le bas blesse :euh:
    En effet, comme vous le remarquerez sans doute, la vitesse de déplacement dépend alors de la distance, parcourant cette dernière en 15 tours.
    Ma question est donc la suivante, comment pourrais-je modifier cette méthode pour obtenir une vitesse constante?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      18 septembre 2011 à 15:17:14

      avec des vecteurs:

      vector2 position(x,y)
      vector2 destination(dX,dY)
      vector2 destDir (dX-x, dy-y)

      position += destDir * vitesse
      • Partager sur Facebook
      • Partager sur Twitter
        18 septembre 2011 à 15:40:16

        Merci de ta réponse rapide.
        Seulement, je ne comprend pas trop ce que tu veux dire...

        Déjà je ne trouve pas la classe vector2.
        De plus, que reprensente dX et dY?
        Merci
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          18 septembre 2011 à 15:50:56

          Citation : Ciut

          Merci de ta réponse rapide.
          Seulement, je ne comprend pas trop ce que tu veux dire...

          Déjà je ne trouve pas la classe vector2.


          normal elle n'existe pas dans l'api, mais c'est juste un conteneur de coordonées:

          public final class Vector2 {
              public final float x;
              public final float y;
          
              public Vector2(final float x, final float y){
                  super();
                  this.x = x;
                  this.y = y;
              }
          
          }
          

          Citation : Ciut


          De plus, que reprensente dX et dY?
          Merci


          les coordonnées du point de destination.
          • Partager sur Facebook
          • Partager sur Twitter
            18 septembre 2011 à 16:00:50

            Merci, mais a quoi correspond l’opération * ? A multiplier les 2 coordonnées par la vitesse?

            C'est bon ^^ en bidouillant un peu je suis arrivé a un résultat satisfaisant.
            float diffX = rawX - positionX;
            float diffY = rawY - positionY;
            		
            float x = (float) (diffX/Math.sqrt((diffX * diffX)+(diffY * diffY)));
            float y = (float) (diffY/Math.sqrt((diffX * diffX)+(diffY * diffY)));
            vecteurVitesse = new Vector2(x,y);
            

            et
            speedX = vecteurVitesse.x*VITESSE_BASE;
            speedY = vecteurVitesse.y*VITESSE_BASE;
            


            Merci beaucoup
            • Partager sur Facebook
            • Partager sur Twitter

            Coordonnées et direction

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown