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 2 segments


Sujet :

Mathématiques

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 18
    Points : 17
    Points
    17
    Par défaut angle entre 2 segments
    Bonjour à tous !!

    J'aimerais savoir comment on peut faire pour calculer l'angle entre deux segments, les deux segments ayant une extremité commune.

    Merci.

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Tu peux utiliser le produit scalaire. En utilisant les definitions suivantes :

    - AB : vecteur de A a B
    - AC : vecteur de A a C
    - | |: norme des vecteur (longeur (positif))
    - BAC: angle entre le sommet A et les points B et C

    Le produit scalaire . s'ecrit de la maniere suivante:
    AB.AC=|AB|*|AC|*cos(BAC)

    Et donc tu peux recuperer l'angle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    angle=arccos( prodscal(AB,AC) / (norm(AB)*norm(BC)) )
    Et donc si tes vecteurs sont normes, l'angle est simplement l'arccos du produit scalaire !

  3. #3
    Invité
    Invité(e)
    Par défaut Calcul de l'angle unique entre deux segments
    cos(alpha) = Y , et cos(-alpha) vaut aussi Y

    Si on a un cosinus qui vaut Y, quelle sera la valeur retournée par arccos(Y) ? alpha ou -alpha ?

    A mon avis, la méthode proposé dans le message ci-dessus est imprécise.

    Je propose :
    - calculer l'angle de AB par rapport à l'horizontale (alpha)
    - calculer l'angle de AC par rapport à l'horizontale (béta)
    - l'angle entre AB et AC vaut béta moins alpha dans tous les cas

    Pour calculer l'angle d'un segment par rapport à l'horizontale, je propose d'utiliser la fonction suivante :
    (avec pour AB :
    DeltaX = XB - XA
    DeltaY = YB - YA

    pour AC :
    DeltaX = XC - XA
    DeltaY = YC - YA)

    Si vous avez une meilleure méthode ou des améliorations à proposer, je suis preneur !

    Code : 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
     
    //------------------------------------------------------------------
    // 
    // AngleCorrige
    // 
    // Renvoie un angle en radians en fonction du DeltaX et DeltaY
    // 
    //------------------------------------------------------------------
    inline REEL vBulle::AngleCorrige(REEL DeltaX,REEL DeltaY)
    {
    	const double Pi=3.141592654;// Pi
    	REEL Angle;
     
    	//Cas particulier pour fonction Atn (Atan en C)
    	if (DeltaX == 0)
    	{
    		if (DeltaY < 0)	
    			Angle = -Pi/2;
    		else	
    			Angle = Pi/2;
    	}
     
    	//Cas "Normaux"
    	else
                    {
    		Angle = atan(DeltaY / DeltaX);
    		if (DeltaX < 0)
    			Angle = Angle + Pi;
    	}
     
    	//Récupération d'un résultat positif
    	if (Angle < 0)
    		Angle = Angle + 2 * Pi;
    	return Angle;
    }

  4. #4
    mio
    mio est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 65
    Points : 168
    Points
    168
    Par défaut
    Si on a un cosinus qui vaut Y, quelle sera la valeur retournée par arccos(Y) ? alpha ou -alpha ?
    alpha. arcos renvoie des valeurs entre 0 et pi et est defini sur [-1,1]
    arctan renvoie entre -pi/2 et pi/2 et est defini sur ]-inf,inf[
    Je pense que l'on ne peut pas ameliorer beaucoup ton algo car dans tous les cas il faut calculer au moin un arccos, un arcsin ou un arctan, et definir dans quel moitie de cercle on se situe. Reste a savoir si arccos est plus rapide que arctan.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    slt;
    c'est peut être un peu tard et tu as certainement déjà trouvé la solution à ton pb (je veux bien la connaitre).
    Cependant si tu peux utiliser un produit scalaire tu peux utiliser des repères et donc des changements de repères. En prenant un repère orthogonal (il n'a pas besoin d'être normé) avec comme axe un te tes segments, le signe des coordonnées de ton autre segment (vecteur) te permettra de determiner le signe de l'angle calculé.
    et hop.
    Vive La Main Gauche
    http://www.lamaingauche.org

Discussions similaires

  1. calculer l'angle entre deux segments
    Par Riham Darine dans le forum Mathématiques
    Réponses: 5
    Dernier message: 22/04/2011, 00h39
  2. 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
  3. calcule d'angle entre 3 points d'une matrice
    Par bmw13fr dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/04/2006, 18h56
  4. angle entre 3 points
    Par elekis dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 27/05/2005, 20h05
  5. Angle entre deux droites quelconques par produit scalaire
    Par cyber_N dans le forum Mathématiques
    Réponses: 6
    Dernier message: 22/05/2005, 20h46

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