Partage
  • Partager sur Facebook
  • Partager sur Twitter

la fonction atan

elle me semble mauvaise

Sujet résolu
    2 juillet 2007 à 17:59:12

    Boujour a vous !
    Je suis en train de faire un jeu où quand on clique avec la souris, le personnage s'oriente vers l'endroit où on a cliqué.
    Je connais la position du personnage et la position où on a cliqué, je connais donc les cotés adjacent et opposé de mon triangle rectangle, je fais donc opposé sur adjacent pour connaitre la tangente et j'utilise la fonction atan pour connaitre la valeur de l'angle. Le résultat est visiblement en radian, mais le résultat obtenu est visiblement faux (d'après ma calculatrice).
    J'ai posté dans le forum c++ parce que je me suis rendu compte que je n'avais pas inclu math.h pour faire ces opérations et donc je me dis que cette fonction doit être comprise dans une autre librairie, ou peut-etre que c'est quelque chose que je ne connais pas...
    Merci de m'aider si vous savez ce que je peux faire! :(

    PS : je vous donne un petit exemple pour être sur que c'est pas ma calculette qui plante (j'ai fait un test et voici ce que j'obtiens) :
    coté adjacent (horizontal): 114
    coté opposé (vertical): 127
    atan(127/114): 0.785398 (a l'ordinateur)
    arctan(127/114): 0.83928... (a la calculette)

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      2 juillet 2007 à 19:43:53

      Hehe , tu es tombé dans le piège de la division entière.

      Ton code fait la chose suivante:

      127/114 = 1.1140... = 1

      et ensuite atan(1) = 0.7853..

      Teste le code suivant pour vérifier:


      #include <iostream>
      #include <cmath>
      using namespace std;

      int main()
      {
      cout << atan(127/114) << endl;  //affiche atan(1)
      cout << atan(127.0/114.0) <<endl;  //affiche(atan(1.1140...)
      return 0;
      }
       


      Donc oui la fonction atan() est correcte :)
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        2 juillet 2007 à 22:52:41

        D'accord merci !
        Mais dans mon code, les valeurs sont en fait des variables, est-ce que faire atan((double)diff_y/(double)diff_x) solutionne le probleme ?
        je vais essayer...
        bonsoir !
        • Partager sur Facebook
        • Partager sur Twitter
          3 juillet 2007 à 9:56:21

          Le plus simple c'est d'essayer :)

          Mais en effet si tes variables sont des (int), le code que tu propose est correcte. Sinon tu peux aussi mettre tes variables en float ou double.
          • Partager sur Facebook
          • Partager sur Twitter
          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
            3 juillet 2007 à 18:13:11

            D'accord merci encore je vais continuer, le reste de mon code doit encore être mauvais mais maintenant je sais que ça vient plus de la
            Merci encore et bonne continuation ! :D
            • Partager sur Facebook
            • Partager sur Twitter

            la fonction atan

            × 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