Maison > Questions et réponses > le corps du texte
Quelle formule mathématique est utilisée ?
滿天的星座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.
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
}
漂亮男人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...