Comment faire pour déterminer si un point est à l'intérieur d'un quadrilatère
Objectif
Je veux déterminer si un point est dans un quadrilatère. Je vais probablement mettre en œuvre la solution dans Matlab, donc j'ai seulement besoin d'un pseudo-code.
Entrées
Coins du quadrilatère : (x1,y1) (x2,y2) (x3,y3) (x4,y4)
Point de Test : (xt, yt)
Sortie
1 - Si, dans le quadrilatère de la
0 - Sinon
Mise à jour
Il a été souligné que l'identification des sommets du quadrilatère n'est pas suffisant pour identifier de manière unique. Vous pouvez supposer que l'ordre des points détermine les côtés du quadrilatère (point 1 relie les 2, les 2 se connecte à 3, 3 se connecte à 4, 4 se connecte à 1)
Les points ne suffisent pas à identifier de manière unique un quadrilatère, à moins qu'il y a une contrainte supplémentaire qu'il est convexe, ou que les points sont définis dans un ordre donné. Est-ce un ou l'autre de ces contraintes existent (si oui, lequel)?
Par exemple, considérons un triangle équilatéral, avec un point supplémentaire dans le centre du triangle. Il suffit de savoir les points ne permet pas de savoir de quel bord du triangle a été tordu pour rencontrer le centre point.
Merci, mis à jour le problème pour le résoudre. Ce doit identifier de manière unique le quadrilatère.
Par exemple, considérons un triangle équilatéral, avec un point supplémentaire dans le centre du triangle. Il suffit de savoir les points ne permet pas de savoir de quel bord du triangle a été tordu pour rencontrer le centre point.
Merci, mis à jour le problème pour le résoudre. Ce doit identifier de manière unique le quadrilatère.
OriginalL'auteur slykat | 2011-05-07
Vous devez vous connecter pour publier un commentaire.
Utilisation
inpolygon
. L'utilisation seraitinpolygon(xt,yt,[x1 x2 x3 x4],[y1 y2 y3 y4])
OriginalL'auteur Jacob
Vous pouvez tester le Point avec cette condition. Vous pouvez également traiter le quadrilatère que les 2 triangles pour calculer son aire.
Merci. oui, Cela fonctionne pour n'importe quel polygone aussi !!!
C'est une merveilleuse solution, mais il peut être facilement vu que cela ne fonctionne que pour les quadrilatères convexes.
Peuvent travailler dans Matlab, mais d'autres langues comparer des nombres à virgule flottante se heurte à des questions d'arrondi. Mieux vaut utiliser pour tester si le point est sur le même côté de tous les rebords.
OriginalL'auteur mili
Puisque c'est un simple quadrilatère vous pouvez tester pour un point dans le triangle de chaque extrémité et un point dans le rectangle du milieu.
MODIFIER Voici le pseudo-code pour point dans le triangle:
Ou à l'aide de Barycentriques technique:
A, B, et C sont le triangle, les points d'extrémité, P est le point en cours de test
OriginalL'auteur SRM
en supposant que vous les coordonnées données sont disposées s.t.
(x1,y1) = la plus à droite de coordonnées
(x2,y2) = supérieure à coordonner
(x3,y3) = de gauche à coordonner
(x4,y4) = botoom-plus de coordonner
Vous pouvez effectuer les opérations suivantes:
OriginalL'auteur Gal
Si le but est de votre propre code de test, puis choisissez tout classique point dans le polygone d'essai à mettre en œuvre. Sinon, faire ce que Jacob suggère.
OriginalL'auteur YXD
Assumer
A,B,C,D
sont les sommets du quadrilatère etP
est le point.Si
P
est à l'intérieur du quadrilatère puis tout point des produitsdot(BP,BA), dot(BP,BC), dot(AP,AB), dot(AP,AD), dot(DP,DC), dot(DP,DA), dot(CP,CB)
etdot(CP,CD)
sera positif.Si
P
est en dehors du quadrilatère d'au moins un de ces produits sera négatif.OriginalL'auteur John Prospathopoulos