11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

voici les données du problème:

J'ai 3 points quelque part dans une page web, avec leur coordonnées.
Ces 3 points créent 2 droites
Je voudrais calculer l'angle formé par les 2 droites au niveau du point n°2

voir image jointe, dans cet exemple le point N°2 est celui qui a les coordonnées 505,149

Ça fait pile 40 ans cet année que j'avais passé le Bac scientifique et depuis j'avoue que j'ai un peu oublié la trigonométrie...

merci 'avance...

upload/1601456410-40948-coordonnees-web.jpg
Modifié par lionel_css3 (30 Sep 2020 - 11:07)
Voici un exemple de ce que tu pourrais faire?:
/*
 * Calcule un angle en degrés entre 3 points.
 */
let angle = (x1, y1, x2, y2, x3, y3) => {
    "use strict";
    let angle_simple = (x1, y1, x2, y2) => {
        if (y1 != y2) return Math.atan((x2 - x1) / (y2 - y1)) * 180 / Math.PI;
        if (x1 > x2) return 90;
        if (x2 > x1) return -90;
        return undefined;
    };
    return angle_simple(x3, y3, x2, y2) - angle_simple(x1, y1, x2, y2);
}

alert(angle(160, 331, 505, 149, 344, 432));


ce serait bien aussi que tu répondes à stryk avant de poser une nouvelle question sur le forum.
adrien881 a écrit :
Voici un exemple de ce que tu pourrais faire?:


ce serait bien aussi que tu répondes à stryk avant de poser une nouvelle question sur le forum.


merci à toi, je vais examiner ça de suite, ça à l'air très intéressant...

J'ai hésité à répondre sur l'autre question car en effet le problème a changé, c'est plus devenu un problème de représentation mathématique que un problème de choix d'outil, etc...

Smiley cligne
Ta formule est super mais Il y a des cas où ça ne fonctionne pas, par exemple:

dans cette image j'ai numéroté l'ordre dans lequel les points sont insérés, je m'attendais à obtenir un angle d'environ 30° au point 2 (ce sera 33° en fait: 180-147) et la formule m'indique l'angle complémentaire (147°), il va donc falloir que j'arrive à déterminer dans quel cas il faut renverser l'angle...

Je rappelle le but de ce que je veux réaliser: on clique 3 fois dans une image et je calcule l'angle formé au point N°2

upload/1601478601-40948-angle.jpg
Effectivement,

il faudrait peut-être dans la fonction angle_simple rajouter un test au début :

if (x2<x1) return 180 - angle_simple(x2, y2, x1, y1);

à vérifier.
J'ai trouvé une solution avec le théorème d'Al-Kashi (théorème de Pythagore étendu).

Avoir des points ne suffit pas, il faut connaitre la longueur des trois segments, alors il suffit de les calculer à partir des points.

soit 3 points A B C de coordonnées respectives xa,ya xb,yb xc,yc
on va circonscrire le triangle dans un rectangle avec un coin du rectangle confondu avec le sommet du triangle qui contient l'angle à calculer.
On va calculer la longueur (en valeur absolue) de chaque coté du triangle en créant les cotés adjacents (pour chacun de ses cotés) au coin du rectangle le plus proche, on aura ainsi créé un nouveau triangle rectangle avec le coté à calculer représentant son hypoténuse.
exemple pour coté1 : entre A(xa,yb) et B(xb,yb)
- les coordonnées de Z1 : xa, yb
- longueur Z1->B = |xb - xa|
- longueur Z1->A = |ya - yb|
- longueur coté1 = racine carré ( (Z1->B)² + (Z1->A)² ) "théorème de Pythagore"

On répète l'opération pour les deux autres cotés, et ensuite on applique le théorème d'Al Kashi


angle_alpha_rad = arccos ( ( coté1 ² + coté2 ² - coté3 ² ) / ( 2 x coté1 x coté2 ) )

arccos est la fonction inverse du cosinus, on obtient un résultat en radians et on peut le convertir en degrés

angle_alpah_deg = ( angle_alpha_rad x 180 ) / Pi





upload/1601815320-40948-rnsolution-triangle.jpg

.
Modifié par lionel_css3 (04 Oct 2020 - 14:50)
Bonjour?

pour illustrer la solution apportée à ce fil j'ai créé un tuto sur ma chaine Youtube, voir ce fil
Modifié par lionel_css3 (25 Nov 2020 - 09:12)
Meilleure solution