Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment déterminer si un point se trouve dans un triangle en JS?

Quelle formule mathématique est utilisée ?

巴扎黑巴扎黑2687 Il y a quelques jours1362

répondre à tous(3)je répondrai

  • 滿天的星座

    滿天的星座2017-06-12 09:31:32

    Questions très courantes en géométrie computationnelle

    Il y a △ABC,以及点O(x, y), que les coordonnées du sommet du triangle soient : A(x1,y1), B(x2,y2), C(x3,y3)

    Le point O est dans △ABC, et le point O et le point C sont du même côté de la droite AB, alors :

    [(x-x1)(y2-y1) - (y-y1)(x2-x1)][(x3-x1)(y2-y1) - (y3-y1)(x2-x1)] > 0

    De même, le point O et le point B sont du même côté de la droite AC ; le point O et le point A sont du même côté de la droite BC.

    Si les trois conditions ci-dessus sont remplies, le point O se trouve dans △ABC.


    Personnellement, je préfère cette méthode car elle ne contient que quatre opérations arithmétiques et un jugement de taille, et n'implique pas d'opérations telles que les fonctions trigonométriques et les racines carrées, elle est donc plus rapide. S'il existe une meilleure façon, veuillez nous en informer.

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:31:32

    Peut être traité via le système de coordonnées barycentrique.
    Lien de référence : https://en.wikipedia.org/wiki...

    Supposons que le point à tester soit (x0, y0) et que les trois points du triangle soient (x1, y1), (x2, y2), (x3, y3)

    Selon la définition des coordonnées du centre de gravité :

    x0 = a * x1 + b * x2  + c * x3
    y0 = a * y1 + b * y2 + c * y3
    a + b + c = 1

    où a b c sont respectivement trois coefficients. Si et seulement si a b c sont à la fois supérieurs ou égaux à 0 et inférieurs ou égaux à 1, le point (x0, y0) est à l'intérieur du triangle formé par le point (x1, y1), le point (x2, y2) et le point ( x3, y3).

    À partir de la définition ci-dessus, nous pouvons obtenir la solution de a b c :

    a = ((y2 - y3)*(x0 - x3) + (x3 - x2)*(y0 - y3)) / ((y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3))
    b = ((y3 - y1)*(x0 - x3) + (x1 - x3)*(y0 - y3)) / ((y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3))
    c = 1 - a - b

    Écrit en méthode JS :

    function pointInTriangle(x0, y0, x1, y1, x2, y2, x3, y3) {
      var pisor = (y2 - y3)*(x1 - x3) + (x3 - x2)*(y1 - y3);
      var a = ((y2 - y3)*(x0 - x3) + (x3 - x2)*(y0 - y3)) / pisor;
      var b = ((y3 - y1)*(x0 - x3) + (x1 - x3)*(y0 - y3)) / pisor;
      var c = 1 - a - b;
    
      return a >= 0 && a <= 1 && b >= 0 && b <= 1 && c >= 0 && c <= 1
    }

    répondre
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:31:32

    Ce n'est pas simple
    Par exemple, le point x a trois angles a, b et c d'un triangle
    x est le sommet d'un angle si la somme des trois angles
    axb bxc cxa est de 360 ​​degrés, alors le point x. est dans le triangle

    Il existe de nombreux articles
    Recherchez-les
    http://www.cnblogs.com/baie/a...

    répondre
    0
  • Annulerrépondre