javascript - Comment déterminer si un point se trouve dans un triangle en JS?
巴扎黑
巴扎黑 2017-06-12 09:29:32
0
3
1377

Quelle formule mathématique est utilisée ?

巴扎黑
巴扎黑

répondre à tous(3)
滿天的星座

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.

phpcn_u1582

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
}
漂亮男人

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...

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal