Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?



  1. #1
    hamoudasafira

    Exclamation calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?


    ------

    Bonjour à tous

    j'ai un petit problème de calcul de l'angle entre les 2 vecteurs, sachant que je sais comment le faire mais la maniére que je fais, le calcul de l'angle j'aurai toujours un angle positive, et c'est là le problème, puisque l'angle pourra être positive ou bien négative!!!
    Je fais le calucul du produit scalaire de 2 vecteur AB et AC, pour avoir le cosinus entre ces vecteurs et puis je fais acos(cos(BÂC))!!!! Mais avec cette méthode j'ai une résultat toujours positive, vous pouvez me proposer une autre méthode pour avoir le signe réel de l'angle BÂC????? Merci

    P.S. : il y aussi une autre méthode aussi pour le faire calculer c'est de calculer l'angle entre le vecteur AB et l'horizontal(Alpha), puis la même chose pour le vecteur AC(Beta). Donc, l'angle entre les deux sera BÂC=Alpha-Betta!!!! Mais comment l'appliquer en c++????

    Je vous remercie.

    -----

  2. Publicité
  3. #2
    Eric78

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    Calcule le produit vectoriel de ces deux vecteurs, ca te donne le cosinus. Puis le déterminant, ca te donne le sinus, et pof, t'as ton angle.
    Pour un TPE sur la cryptographie ou les trous noirs, allez voir mon profil.

  4. #3
    hamoudasafira

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    Citation Envoyé par Eric78 Voir le message
    Calcule le produit vectoriel de ces deux vecteurs, ca te donne le cosinus. Puis le déterminant, ca te donne le sinus, et pof, t'as ton angle.
    si je calcul le produit vectoriel ça me donne le sinus pas le cosinus !!!!!!! et puis pour calculer l'angle sans utiliser le arcsin puis que l'angle pourra être positive et négative, je veux garder le signe de l'angle alors je fais comment?

  5. #4
    robert et ses amis

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    Salut,

    j'espère que tu te portes bien depuis la dernière fois...

    pour ton problème, j'imagine que tu es en 2 dimensions, sinon c'est un peu problématique pour définir le signe d'un angle.

    Si c'est bien du 2D et qu'on par des données Xa,Ya,Xb,Yb qui sont les coordonnées des vecteurs AB et AC, tu peux écrire quelque chose comme ça:
    Code:
    Na = sqrt(Xa*Xa+Ya*Ya);
    Nb = sqrt(Xb*Xb+Yb*Yb);
    C = (Xa*Xb+Ya*Yb)/(Na*Nb);
    S = (Xa*Yb-Ya*Xb);
    BÂC = sign(S)*acos(C);
    où sqrt() renvois la racine carrée et sign() le signe du réel.
    Je ne sais plus si c'est comme ça qu'on les trouve en c++ mais ces fonctions doivent exister.

    pour l'histoire, j'utilise comme toi le produit scalaire pour trouver cos(BÂC) mais en plus je considère le produit vectoriel pour trouver le sinus (enfin son signe suffit).

    Dis moi si ça te convient.

  6. A voir en vidéo sur Futura
  7. #5
    robert et ses amis

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    ormis le lapsus, Eric78 a raison, et c'est d'ailleurs exactement ce que je viens de proposer.

  8. #6
    hamoudasafira

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    Citation Envoyé par robert et ses amis Voir le message
    Salut,

    j'espère que tu te portes bien depuis la dernière fois...

    pour ton problème, j'imagine que tu es en 2 dimensions, sinon c'est un peu problématique pour définir le signe d'un angle.

    Si c'est bien du 2D et qu'on par des données Xa,Ya,Xb,Yb qui sont les coordonnées des vecteurs AB et AC, tu peux écrire quelque chose comme ça:
    Code:
    Na = sqrt(Xa*Xa+Ya*Ya);
    Nb = sqrt(Xb*Xb+Yb*Yb);
    C = (Xa*Xb+Ya*Yb)/(Na*Nb);
    S = (Xa*Yb-Ya*Xb);
    BÂC = sign(S)*acos(C);
    où sqrt() renvois la racine carrée et sign() le signe du réel.
    Je ne sais plus si c'est comme ça qu'on les trouve en c++ mais ces fonctions doivent exister.

    pour l'histoire, j'utilise comme toi le produit scalaire pour trouver cos(BÂC) mais en plus je considère le produit vectoriel pour trouver le sinus (enfin son signe suffit).

    Dis moi si ça te convient.
    salut mon amie j'espere que tu vas bien ça fait longtemps que je n'ai pas eu tes nouvelles, je te remercie pour ta réponse je veus essayé de faire ça le sign n'est la même en c++ mais il y a une fonction pour la faire ça n'ai pas trop grave je ferai le calcul et je te dirai si c'est bon ou pas.
    merci de m'nvoyer aussi tes nouvelles stp en privée salut.

  9. Publicité
  10. #7
    hamoudasafira

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    j'ai oublié c'est en 3 D pas en 2D ça change?????

  11. #8
    robert et ses amis

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    Citation Envoyé par hamoudasafira Voir le message
    j'ai oublié c'est en 3 D pas en 2D ça change?????
    ben oui ça change

    si tu lis mon calcul, tu vois tout de suite qu'il n'y a que 2 coordonnées.

    ensuite, et c'est plus essentiel je pense, je ne vois pas trop ce que représente le signe d'un angle en 3D...
    en 2D, il suffit de s'entendre au préalable sur le "sens positif" (habituellement le sens trigonométrique) puisqu'il n'y a qu'un seul axe autour duquel tourner. Mais en 3D ça n'est plus possible puisque qu'on peut prendre des axes de rotations dans n'importe quelle direction...

    En fait, mais ça peut aussi dépendre de ce que tu veux faire, pour caratériser une rotation en 3D, il va te falloir un angle mais aussi un vecteur (qui remplace le signe en quelque sorte).
    En particulier, c'est nécessaire si tu veux appliquer cette rotation à d'autres vecteurs.

    j'attends ta réponse pour voir de quoi il retourne

  12. #9
    hamoudasafira

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    Citation Envoyé par robert et ses amis Voir le message
    ben oui ça change

    si tu lis mon calcul, tu vois tout de suite qu'il n'y a que 2 coordonnées.

    ensuite, et c'est plus essentiel je pense, je ne vois pas trop ce que représente le signe d'un angle en 3D...
    en 2D, il suffit de s'entendre au préalable sur le "sens positif" (habituellement le sens trigonométrique) puisqu'il n'y a qu'un seul axe autour duquel tourner. Mais en 3D ça n'est plus possible puisque qu'on peut prendre des axes de rotations dans n'importe quelle direction...

    En fait, mais ça peut aussi dépendre de ce que tu veux faire, pour caratériser une rotation en 3D, il va te falloir un angle mais aussi un vecteur (qui remplace le signe en quelque sorte).
    En particulier, c'est nécessaire si tu veux appliquer cette rotation à d'autres vecteurs.

    j'attends ta réponse pour voir de quoi il retourne
    On fait, moi je travail sur des maillages alors en 3D et si tu immagines que tu as 2 triangles, l'arrête de milieu a 2 sommets p et q et ceux du côtés sont U1 et U2, alors pour calculer l'angle au point p dans chaque face il faut calculer les vecteurs et puis l'angle entre ces 2 vecteurs, et comme c'est du maillage j'ai des angles en 2 sens positive et négative, je te mets le bou de code pour connaître comment je fais le calcul.
    J'ai essayé d'utiliser ta méthode mais je me suis bloquer dans le calcul de sign comme moi, je travail avec vtk et tu le verras dans le code, le sign je le calcul entre 2 vecteurs en faisant le produit scalaire entre les 2. Alors est ce j'ai besoin de faire le calcul de produit vectoriel et puis calculer son sign ou bien je pourrai faire le calcul de sign du produit scalaire???
    Code:
    for(int Edge=0;Edge<Input->getNumberofEdges();Edge++)
    {
    Input->GetEdgeVertices(Edge,j,i);
    			Input->GetEdgeFaces(Edge,face1,face2);
    			U1=Input->GetThirdPoint(face1,i,j);//passe moi la 3 ème points du face f1
    			U2=Input->GetThirdPoint(face2,i,j);//passe moi la 3 ème points du face f2
    			//passe moi les coordonnées du sommet p
    			Input->GetPointCoordinates(i,X);
    			Input->GetPointCoordinates(j,Y);
    			Input->GetPointCoordinates(U1,F);//passe moi les coordonnées du 3 ème sommet
    			Input->GetPointCoordinates(U2,G);
    			PU1[0]=F[0]-X[0];
    			PU1[1]=F[1]-X[1];
    			PU1[2]=F[2]-X[2];
    			
    			PQ[0]=Y[0]-X[0];
    			PQ[1]=Y[1]-X[1];
    			PQ[2]=Y[2]-X[2];
    			
    			PU2[0]=G[0]-X[0];//calcul des 3 vecteurs de chaque 2 triangles adjacents
    			PU2[1]=G[1]-X[1];
    			PU2[2]=G[2]-X[2];
    			double Z[3],R[3];
    			double Na=vtkMath::Norm(PU1);
    			double Nb=vtkMath::Norm(PQ);
    			double Nc=vtkMath::Norm(PU2);
    			double CosA=vtkMath::Dot(PU1,PQ)/(Na*Nb);
    			double CosB=vtkMath::Dot(PU2,PQ)/(Nc*Nb)//produit scalaire;
    			vtkMath::Cross(PU1,PQ,Z);
    			vtkMath::Cross(PU2,PQ,R);//produit vectoriel
    }

  13. #10
    robert et ses amis

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    bon, j'ai pas tout compris.
    ce qui m'aiderait à t'aider, ce serait que tu m'expliques brièvement pourquoi ce "signe" est si important pour toi.

  14. #11
    hamoudasafira

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    le signe de l'angle est lié aux arrêtes et les arrêtes sont creés des triangles et c'est triangles crées des bords->maillage. Alors j'ai besoin de signe de l'angle pour déterminer le placement du chaque arrête et du chaque bord puisque j'ai du bord qui doivent avoir des angles positive et pareil des anges négatives, voilà. Et tout ça est lié aussi au courbures moyennes de chaques arrêtes le courbures sont du fois négatives ou bien positives, pour avoir la forme concave si positive et convexe si négative, j'espére avoir bien expliquer. merci bien, là je suis toujours au labo j'ai pas internet chez moi, donc il faut que je termine ce calcul ce soir pour pouvoir rentrer chez moi, c'est un défit pour moi . désoler de t'avoir occupé, et merci.

  15. #12
    hamoudasafira

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    est ce que je peut faire comme ça ?????

    Code:
                         if(SinA>0)
    				return Alpha=acos(CosA);
    			else
    				return Alpha=-acos(CosA);
    			if(SinB>0)
    				return Beta=acos(CosB);
    			else
    				return Beta=-acos(CosB);

  16. Publicité
  17. #13
    hamoudasafira

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    salut alors, t'a pas touvé la solution et puis tu m'as répondu sur ma question si je pourrai faire le suivant ou pas (voir réposne d'avant).
    merci

  18. #14
    robert et ses amis

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    désolé, mais actuellement je ne comprends pas par rapport à quoi est défini ton signe.

    normalement il doit y avoir un vecteur autour duquel tu tournes (ou alors un plan dans lequel tu tournes).

    si tu as ce vecteur, tu peux trouver le signe de ton angle en faisant le produit scalaire entre ce vecteur et le produit vectoriel.

    sans ça, je ne sais pas du tout...

  19. #15
    invite986312212
    Invité

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    bonjour,

    tu parles de convexe et concave, ça suppose une surface orientée. Il me semble que les gens qui font des modèles 3D associent une normale à chacun des polygones. Cette normale définit qu'est-ce qui est l'intérieur et l'extérieur de la surface. Ensuite tu évoques deux triangles accolés par une arête. Peut-être veux-tu calculer l'angle dièdre entre les deux triangles (?)

  20. #16
    hamoudasafira

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    exactement, Mr. ambrosio é tout compris.
    ou, je calcul l'angle diédre mais ce n'est pas cet angle que j'evoque, ici. Si tu immagine que t'a 2 triangles sur les axes x,y et z tu voudras calculer les 2 angles, au sommet p dans les 2 triangles adjacents à l'arrête PQ comment peut tu le faire en préservant et en respectant le signe de l'angle ??????? j'ai une hypothése .
    on sait que AB.BC=||AB||||BC||Cos(ABC)

    on tire comme cela le cosinus de l'angle, le soucis c'est que un angle et son oppposé on le même cosinus il faut donc déterminer le signe du sinus, par exemple avec le produit vectoriel
    On plonge nos 2 vecteurs Ab et BC dans l'espace en rajoutant une coordonnée nulle ex: si AB(1,2)->AB(1,2,0)

    On calcule le produit vectoriel de nos deux nouveaux vecteurs ce qui nous donne un troisième vecteur orthogonal au plan de base dans l'espace donc de la forme (0,0,k) et on regarde le signe de k pour savoir de quel coté se place BC par rapport à AB: si k>0 on doit tourner dans le sens inverse des aiguille d'une montre pour amener AB sur BC.

    mais peut-on l'appliqué aussi en 3D????? si oui comment?

  21. #17
    invite986312212
    Invité

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    Citation Envoyé par hamoudasafira Voir le message
    exactement, Mr. ambrosio é tout compris.
    et bé là je comprends plus rien... mais peut-être que cette page peut t'aider:
    http://whistleralley.com/polyhedra/derivations.htm

    bon courage.

  22. #18
    hamoudasafira

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    ce n'est pas l'angle diédre que je voudrai calculer, c'est l'angle entre 2 vecteurs voilà si tu prend un sommet P, qui contient 3 vecteurs PU1,PU2,et PQ et je voudrai faire le calcul de l'angle entre PU1 et Pq et le calcul entr eles 2 vecteurs PU2 et PQ tout en respectant le signe de 2 angles?????????? c'est tout

  23. Publicité
  24. #19
    Jackyzgood

    Re : calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?

    Bonjour à tous

    Je me permet de déterrer cette discussion car je rencontre le même problème. J'ai bien compris la solution donnée :

    Citation Envoyé par hamoudasafira Voir le message
    Na = sqrt(Xa*Xa+Ya*Ya);
    Nb = sqrt(Xb*Xb+Yb*Yb);
    C = (Xa*Xb+Ya*Yb)/(Na*Nb);
    S = (Xa*Yb-Ya*Xb);
    BÂC = sign(S)*acos(C);
    Mais je me pose une question, est ce que ceci est équivalent :



    C'est juste pour ne pas a avoir a calculer les normes inutilement et ne pas s'embêter avec des variables supplémentaire dans mon programme.
    si c'est idiot mais que ca marche, c'est que ce n'est pas idiot

Discussions similaires

  1. definition de l'angle entre 2 vecteur dans un espace 3D
    Par porcinator dans le forum Mathématiques du supérieur
    Réponses: 9
    Dernier message: 04/07/2014, 13h58
  2. calcul de l'angle au centre d'un cercle
    Par samplaid dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 14/11/2007, 13h31
  3. calcul de l'angle entre 2 vecteurs en respectant le signe de l'angle?
    Par hamoudasafira dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 26/04/2007, 20h31
  4. calcul de l'angle dièdre
    Par hamoudasafira dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 20/02/2007, 16h04
  5. theoreme de l'angle inscrit
    Par lehar dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 15/01/2007, 23h36