Si j'ai deux rectangles dont les positions sont définies à l'aide de deux vecteurs 2D (c'est-à-dire en haut à gauche, en bas à droite), comment puis-je vérifier les points qu'ils croisent?Vérification des points d'intersection entre deux rectangles?
Répondre
Je suppose que vous voulez réellement le résultat de l'intersection, pas seulement le test si les deux rectangles se croisent.
L'intersection de rect1 = (l1, t1, r1, b1) et rect2 = (L2, T2, R2, b2) est à nouveau un rectangle:
rectIntersection = (max(l1, l2), max(t1, t2), min(r1, r2), min(b1, b2))
rectIntersection est naturellement vide si left >= right || top >= bottom
supposant un rectangle est à gauche/haut-inclus et à droite/bas-exclusif.
Les rectangles se croisent si
l1 < r2 && l2<r1 && t1<b2 && t2<t1
En supposant que l'origine est sur left-top
de l'écran.
Si Vérifier si le coin supérieur gauche d'un rectangle (x3,y3)
est inférieur au coin inférieur droit d'un autre rectangle (x2,y2)
, les deux se croisent.
Les points sont (x2,|y2-y3|)
et (|x2-x3|,y2)
.
Ceci est pour un rectangle1 et un reactangle2 à droite de rectangle1.
Applique l'inverse de la translation de gauche.
Deux rectangles se chevauchent lorsqu'il y a au moins un point intérieur X, Y commun aux deux. Soit le premier rectable {T1, L1, B1, R1}
et le second {T2, L2, B2, R2}
(en haut, à gauche, en bas, à droite). Il s'ensuit que (X>L1)
et (X<R1)
et (Y>T1)
et (Y<B1)
, et de même pour le rectangle 2. De (X>L1)
et (X<R2)
il s'ensuit que (L1<R2)
. De même, (L2<R1)
, (T1<B2)
et (T2<B1)
.
Ces 4 conditions sont donc nécessaires. Il n'est pas directement évident qu'ils sont également suffisants, mais c'est aussi le cas.
Si vous êtes intéressé plus à une fonction pour faire le travail, que de mettre en œuvre un algorithme,
départ IntersectRect Function sur Windows.
- 1. Détection de collision entre deux rectangles
- 2. Position entre deux points?
- 3. Distance minimale entre deux rectangles pivotés avec des angles différents
- 4. Vérification des points d'accès
- 5. Tracer un chemin entre deux points
- 6. Equation en ligne droite entre deux points
- 7. PHP Find Coordonnées entre deux points
- 8. Logique pour la vérification entre deux nombres
- 9. Calcul d'un arc tangent entre deux points sur deux cercles
- 10. Cliquez deux nouveaux points et tracez une ligne entre ces deux points en utilisant l'événement souris
- 11. Comment séparer deux rectangles l'un de l'autre?
- 12. Constantes de dénomination des problèmes: deux triangles rectangles
- 13. Lerp entre deux points CGP pour obtenir des valeurs de tous les pixels entre?
- 14. Déterminer l'aire de l'intersection de deux rectangles
- 15. Matlab - Tracer la ligne de contour entre deux points différents
- 16. Réduire la RMSD entre deux ensembles de points
- 17. Détection de collision 2D entre rectangles
- 18. Trouver les coordonnées d'un point entre deux points?
- 19. Google Maps GDirections - Itinéraire entre deux points sur une carte
- 20. la distance Looping entre deux points, et q pour quitter
- 21. Ombrage d'une zone entre deux points dans un graphe matplotlib
- 22. Insérer une chaîne entre deux points avec PHP
- 23. google maps tracé de route entre deux points
- 24. If-Vérification de l'instruction vor une valeur entre deux autres
- 25. basculer entre les vues des deux XIB
- 26. Trouver des angles de rotation entre des points 3d
- 27. établir des distances entre deux points en utilisant google maps api?
- 28. Regex et les deux-points (:)
- 29. Comment puis-je supprimer un deux-points entre deux nombres dans VB.NET?
- 30. Déplacer des rectangles sur des contrôles
Les versions à axe de séparation sont plus efficaces, cette version signifie que vous devrez toujours faire quatre comparaisons. –
+ Vous devrez faire au moins un test supplémentaire pour voir si le rect résultant est vide. Cela signifie que cette version est 5-6 conditionnelles par rapport à 1-4 pour la version SAT. –
Je pense que l'affiche veut réellement l'ensemble résultant des points d'intersection et pas seulement le test si les deux se croisent. Selon le contexte, il peut être préférable de calculer l'intersection et d'affirmer qu'elle n'est pas vide. – Sebastian