calcul d'un angle donné par 3 points

Titre initial : 3 points en entrée et calcul d'un angle spécifique.
[Le titre doit être concis. AD]

Bonjour,

J'ai une question concernant le calcul d'un angle.
Les seules données que j'ai en entrée sont les coordonnées (X,Y) de 3 points A, B et C.

Avec le théorème d'Al Kashi, je suis capable de calculer les angles formés par ces points. L'angle qui m'intéresse est l'angle formé au niveau de B.

J'ai donc utilisé le calcul suivant pour calculer mon angle (c'est du code vb):

fA = Sqr(((Xc - Xb) ^ 2) + ((Yc - Yb) ^ 2)) 'distance entre b et c
fB = Sqr(((Xc - Xa) ^ 2) + ((Yc - Ya) ^ 2)) 'distance entre a et c
fC = Sqr(((Xb - Xa) ^ 2) + ((Yb - Ya) ^ 2)) 'distance entre a et b
fAngle = ((fA ^ 2) + (fC ^ 2) - (fB ^ 2)) / (2 * fA * fC) '(a2 + c2 - b2) / (2*a*c)
Acos(fAngle) 'inverse du cosinus
Degrees(fAngle) 'fonction degree

Cela fonctionne très bien mais ce calcul me renvoi toujours l'angle interne du triangle formé par ces 3 points (inférieur à 180 degré). Or moi je veux toujours calculer l'angle formé "en bas à gauche" du point B. En effet, je veux calculer l'angle toujours dans le sens de rotation d'une aiguille d'une montre. Parfois cet angle est inférieur à 180 degrés mais parfois il est supérieur à 180 degrés en fonction de comment sont positionnées les 3 points.

Je sais qu'il me suffit de faire 360° - fAngle pour obtenir l'angle souhaité lorsque l'angle que je dois calculer est supérieur à 180°. Le problème est que je ne sais pas comment savoir à l'avance si je dois ou non soustraire mon résultat à 360°.

Donc, ma question est : est-il possible avec 3 points de savoir si le fameux angle que je dois calculer sera supérieur ou non à 180°? Ainsi je saurais quelle formule je dois utiliser pour calculer mon angle.

Merci pour votre aide.

Ben.

Réponses

  • Trouve le sinus de cet angle avec le produit vectoriel.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Salut Nico,

    Merci pour ta réponse. En revanche je n'ai pas peur de dire que je suis nul en maths. Je fais un programme pour un pote qui a besoin de mes talents de programmeur mais pas de mathématicien :)

    En gros je ne comprends pas ta réponse. J'ai oublié ce que c'est qu'un produit vectoriel!

    Tu pourrais stp me donner exactement la formule en question? C'est une formule que j'applique au résultat de ma fonction (fAngle)?

    Merci encore.

    Ben.
  • Copie ma phrase dans un moteur de recherche…
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Merci, tu es trop aimable...
  • Mon cher Benn
    Soient deux vecteurs:
    $\overrightarrow{V}(x, y)$ et $\overrightarrow{V'}(x', y')$ avec leurs composantes dans une base orthonormée.et soit $\theta = (\overrightarrow{V}, \overrightarrow{V'})$ leur angle
    Dans cette base, le produit scalaire est:
    $\langle \overrightarrow{V}\mid \overrightarrow{V'}\rangle = x.x' + y.y' = \| \overrightarrow{V}\|.\| \overrightarrow{V'}\|\cos(\theta)$
    et le produit mixte que Nicolas appelle abusivement vectoriel:
    $[ \overrightarrow{V}, \overrightarrow{V'}]= x.y' - y.x' = \| \overrightarrow{V}\|.\| \overrightarrow{V'}\|\sin(\theta)$
    Ici $ \| \overrightarrow{V}\|^2 = x^2+y^2$ et $ \| \overrightarrow{V'}\|^2 = x'^2+y'^2$.
    Tu calcules ainsi $\sin(\theta)$ et $\cos(\theta)$ et tu récupères ensuite $\theta$.
    Amicalement
    Pappus
  • Merci Pappus ;)

    J'ai réussi à faire ce que je souhaitais faire, j'ai trouvé quelque chose de similaire sur le net déjà en VB. ^^

    Bonne journée.

    Ben.
  • Le premier lien dans Gogole donne les trois quarts de la solution, le deuxième fait tout…
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
Connectez-vous ou Inscrivez-vous pour répondre.