IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Angle entre deux droites quelconques par produit scalaire


Sujet :

Mathématiques

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut Angle entre deux droites quelconques par produit scalaire
    angle entre 2 droites quelconques - produit scalaire :
    ---------------------------------------------------------------------

    HELLO LE MONDE !!

    j'ai un petit problème en voulant connaitre l'angle entre 2 droites QUELCONQUES. (je travaille avec Visual C++ 6.0)

    j'utilise la formule: XX' + YY' = U . V . cos (alpha)

    très souvent, je tombe sur un acos(xxx) = -1. #INF 0000 !!
    donc un angle infini ou faux. sinon, dans les autres cas, je tombe sur un angle juste.

    Pour ce problème, j'ai remarqué que le programme faisait souvent des calculs comme : acos(11) par exemple ce qui est impossible....
    JE COMPRENDS PAS CE QUI VA PAS DANS MON ALGO; SINON Y A T'IL DES CHOSES A RESTREINDRE, DES CAS PARTICULIERS A EVITER, ...

    Voici mon programme: (c'est du traitement d'image format BMP)
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
            /* POINT : structure => {x, y} */
    	POINT  a,b;              /* une droite AB */
    	POINT  c,d;              /* une droite horizontale CD */
    	int	   xxp_p_yyp;  /* XX' + YY' */
    	double	sqrt_comp;   /* racine carré des composantes au carré */
    	double alpha;           /* l'angle final */
     
            /* l'image fait 1024 * 768 pixels */
            /* prenons quelques droites */
    	POINT p2={140,186}, p3={712,645}, p4={904,574},    p5={907,516}, p6={307,96},p1={142,129};
     
            /* stockage des pts des droites dans un tableau */
            POINT* p_ref = new POINT[6];
    	p_ref[0] = p1; p_ref[1] = p2; p_ref[2] = p3; p_ref[3] = p4; p_ref[4] = p5; p_ref[5] = p6; 
     
    	/* test stockage des résultats*/
            FILE* f = fopen("c:\\angles.txt", "w");
     
                    /* prenons la deuxième droite */
    		a = p_ref[1];
    		b = p_ref[2];
     
                    // une droite HORIZONTALE quelconque à comparer avec la droite désignée plus haut
    		c.x = 2;	  c.y = 300;
    		d.x = 766;	d.y = 300;
     
    		// ( XX' + YY' ) = ]U[ . ]V[ . cos(ALPHA)
    		xxp_p_yyp	= ((b.x - a.x)*(d.x - c.x) + (b.y - a.y)*( d.y - c.y ));
    		sqrt_comp	= (sqrt( ((b.x - a.x)*(b.x - a.x))+((d.x - c.x)*(d.x - c.x)) )) * (sqrt( ((b.y - a.y)*(b.y - a.y))+(( d.y - c.y )*( d.y - c.y )) ));
                    /* arc cos */
    		alpha		= acos( xxp_p_yyp / sqrt_comp );	// l'ordi est en RADS
    		alpha		= (alpha*180)/PI;	// conversion en DG
    		//
            /* fermeture fichier - test de stockage des résultats */
    	fclose(f);

    Voilà, voilà.
    Qu'en pensez - vous; pourquoi ai-je ce problème ??

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    le calcul de sqrt_comp n'est pas bon...

    U²=(b.x - a.x)²+(b.y - a.y)²
    V²=(d.x - c.x)²+(d.y - c.y)²

    d'où sqrt_comp=U.V=sqrt((b.x - a.x)*(b.x - a.x)+(b.y - a.y)*(b.y - a.y))+sqrt((d.x - c.x)*(d.x - c.x)+(d.y - c.y)*(d.y - c.y))
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut RE: produit scalaire
    Nan !! Ca marche pas.

    Quand j'execute le programme avec tes modifs c-a-d simplement le : sqrt_comp = .... (j'ai fait un copier/coller comme ca pas d'erreurs)

    En reprennant le même code (plus haut), j'ai fait un test avec les droites :

    -- A ( 574, 232 ) \ droite D1
    -- B ( 298, 454 ) /

    -- C ( 2 , 468 ) \ droite D2 (un droite parfaitement horizontale)
    -- D ( 766, 468 ) /

    j'obtient : xxp_p_yyp = -210864 ET sqrt_comp = 1118.20
    ce qui revient à faire un arc_cos de d'environ -108 !!!!!!!!!!!!

    Et là encore, je comprends pas pourquoi !!!!
    GRRRRRR !!

    Avez - vous réponse à ce test ??

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par plegat
    d'où sqrt_comp=U.V=sqrt((b.x - a.x)*(b.x - a.x)+(b.y - a.y)*(b.y - a.y))+sqrt((d.x - c.x)*(d.x - c.x)+(d.y - c.y)*(d.y - c.y))
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqrt_comp=U.V=sqrt((b.x - a.x)*(b.x - a.x)+(b.y - a.y)*(b.y - a.y)) * sqrt((d.x - c.x)*(d.x - c.x)+(d.y - c.y)*(d.y - c.y))
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut RE: produit scalaire
    Salut,

    Effectivement !! je viens moi aussi de m'en apercevoir et l'ai testé et ca marche effectivement !!
    Il faut faire quand même gaffe à l'ordre des points d'une droite.
    par exemple:
    pour droite AB : ab <différent de> ba ==> on obtient alors l'angle inverse.

    bon ben .... terminus.
    Merci encore à vous tous pour vos réponses.

  6. #6
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut Re: RE: produit scalaire
    Citation Envoyé par cyber_N
    .... (j'ai fait un copier/coller comme ca pas d'erreurs)
    Désolé, c'est moi qui avait fait l'erreur!
    J'enlèverai mes moufles et je mettrai mes lunettes la prochaine fois!
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    LOL !! C'est pas grave.
    (C'est quand même toi qui m'a répondu le plus vite ).
    Je doit rendre un projet en info. le plus vite et tu m'a mis sur la piste, merci encore à toi (et à plegibone aussi ).

    bye.
    8)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programmation Python angles entre deux vecteurs
    Par Manudu38 dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 18/11/2009, 18h17
  2. angle entre deux points
    Par Argasm dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 29/06/2009, 21h45
  3. Calcul d'angle entre deux segments pour algo de Jarvis
    Par Niko_de_bordo dans le forum Mathématiques
    Réponses: 14
    Dernier message: 25/06/2009, 23h36
  4. Calcul d'angle entre deux vecteurs
    Par feynman dans le forum Fortran
    Réponses: 8
    Dernier message: 22/09/2007, 13h59
  5. Réponses: 1
    Dernier message: 15/09/2006, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo