Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de précision avec sin et cos (maths.h)

Sujet résolu
    21 juin 2008 à 17:28:48

    Bonjour à tous, j'ai commencé à coder un petit programme en c++ (visual studio 2005) avec OpenGL qui lit des informations dans un fichier et les restitue à l'écran, pour le moment ça fait du vectoriel tout moche en gros ^^

    seulement j'ai un problème avec les fonctions de trigo de maths.h: lorsque je dessine un cercle avec les instructions suivantes :

    glColor3f(1.f,1.f,1.f);

    float R = 55.f;
    int nb = 20;
    glBegin(GL_POLYGON);
    for(int i=0; i<nb; i++){glVertex2d(R*cos(360.f * i / nb),R*sin(360.f * i / nb));}
    glEnd();

    j'obtiens
    Image utilisateur

    y a-t-il une librairie (légère) où je pourrais trouver des fonctions cos et sin qui me restituent un plus joli cercle?

    merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      21 juin 2008 à 18:02:56

      Le problème vient pas de cos et sin. Mais du fait que tu divises par un entier.
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        21 juin 2008 à 18:11:44

        merci pour une réponse si rapide !

        malheureusement en remplaçant tous les int par des float j'obtiens exactement le même résultat

        glColor3f(1.f,1.f,1.f);
        float nb = 20.f;
        float R = 55.f;
        glBegin(GL_POLYGON);
        for(float i=0; i<nb; i++){glVertex2f(R*cos(360.f * i / nb),R*sin(360.f * i / nb));}
        glEnd();

        (c'est peut être un crime de mettre un float comme index d'une boucle mais même ça ne marche pas)
        • Partager sur Facebook
        • Partager sur Twitter
          21 juin 2008 à 18:14:24

          Citation : Sylnade

          merci pour une réponse si rapide !

          malheureusement en remplaçant tous les int par des float j'obtiens exactement le même résultat

          glColor3f(1.f,1.f,1.f);
          float nb = 20.f;
          glBegin(GL_POLYGON);
          for(float i=0; i<nb; i++){glVertex2f(55*cos(360.f * i / nb),55*sin(360.f * i / nb));}
          glEnd();

          (c'est peut être un crime de mettre un float comme index d'une boucle mais même ça ne marche pas)


          Et la ?
          55*cos(360.f * i / nb),55*sin(360.f * i / nb)
          • Partager sur Facebook
          • Partager sur Twitter
            21 juin 2008 à 18:38:29

            désolé, j'avais mal écrit le post mais dans mon fichier c'est écrit uniquement avec des float (j'ai corrigé le post)
            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2008 à 10:56:50

              Citation : Sylnade

              seulement j'ai un problème avec les fonctions de trigo de maths.h



              Parce que c'est des radians qu'il faut lui faire manger à cos.
              • Partager sur Facebook
              • Partager sur Twitter
                22 juin 2008 à 12:54:34

                Ah !!! merci beaucoup !
                quel idiot je fais :D

                ça marche bien maintenant.

                au passage, y a-t-il une constante Pi déjà définie dans maths.h ? (histoire de faire les choses proprement)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  22 juin 2008 à 12:58:02

                  De mémoire, dans la norme : non.
                  Mais dans la pratique, la plus des compilateurs en définisse une (M_PI).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 juin 2008 à 13:01:00

                    #define _USE_MATH_DEFINES
                    #include <math.h>
                    
                    // M_PI est une macro valant Pi
                    double pi = M_PI;
                    
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème de précision avec sin et cos (maths.h)

                    × 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