Tourner en 3D - Point autour d'une autre

J'ai une fonction dans mon programme qui tourne un point (x_p, y_p, z_p) autour d'un autre point (x_m, y_m, z_m) par les angles w_nx & w_ny. Les nouvelles coordonnées sont stockées dans des variables globales x_n, y_n, et z_n. La Rotation autour de l'axe des y (donc évolution de la valeur de w_nx - de sorte que les valeurs de y sont pas endommagés) fonctionne correctement, mais dès que je fais une rotation autour de l'x ou l'axe z (la modification de la valeur de w_ny) les coordonnées ne sont pas plus valables. J'ai commenté sur la ligne je pense que mon erreur est, mais je n'arrive pas à comprendre quel est le problème avec ce code.

Quelqu'un peut m'aider?

void rotate(float x_m, float y_m, float z_m, float x_p, float y_p, float z_p, float w_nx ,float w_ny)
    {
        float z_b = z_p - z_m;
        float x_b = x_p - x_m;
        float y_b = y_p - y_m;
        float length_ = sqrt((z_b*z_b)+(x_b*x_b)+(y_b*y_b));
        float w_bx = asin(z_b/sqrt((x_b*x_b)+(z_b*z_b))) + w_nx;
        float w_by = asin(x_b/sqrt((x_b*x_b)+(y_b*y_b))) + w_ny; //<- there must be that fault
        x_n = cos(w_bx)*sin(w_by)*length_+x_m;
        z_n = sin(w_bx)*sin(w_by)*length_+z_m;
        y_n = cos(w_by)*length_+y_m;
    }
  • Si votre aide opengl je suis sûr que d'une bibliothèque graphique aurait une matrice de vecteurs et de l'implantation que vous pouvez utiliser. la rotation d'un point par l'intermédiaire d'une matrice de simplification de votre algorithme.
  • Vouliez-vous dire "mise en œuvre"? 😉
  • Si vous n'êtes pas déjà familier avec le terme, vous devriez lire sur "Gimbal Lock". Je ne peux pas dire immédiatement si votre code pourrait en souffrir, mais c'est un défaut commun quand vous faites ce genre de rotation à l'aide de "Angles d'Euler".
  • j'ai essayé d'utiliser glrotatef, mais il ne tourne que le dessin, pas les coordonnées des sommets, et j'ai besoin de faire tourner les coordonnées afin de vérifier les collisions!
InformationsquelleAutor Andi Faust | 2012-11-07