Comment vérifier l'intersection entre une ligne et un rectangle?
Le titre dit tout, j'ai été la recherche autour et ne pourrais pas trouver quelque chose qui était simple et au point. Comment devrais-je prendre une ligne avec des points (x1,y1) & (x2, y2) et de vérifier son intersection entre un rectangle (xR,yR)? J'ai vu dans le Line2D paquet qu'il y avait quelques intersection des méthodes mais vous ne savez pas comment mettre tout cela en place. Quelqu'un peut-il m'indiquer une façon correcte de mise en place pour vérifier la présence d'une intersection (collision)?
"Merci Dan" Ne pas inclure les sigs. dans les questions. Collision entre
Avertissement. Parce que vous pouvez de manière générique, l'utilisation de Java Zone de classe pour faire de collision/intersection de détection pour presque tous les produits Java 2D des objets graphiques, il est tentant de penser qu'il peut être utilisé pour TOUS les objets graphiques. Mais il ne peut pas être – parce que, si vous construisez un espace pour une "ligne" de la zone de la ligne elle-même commence à vide. Par conséquent, il est de l'intersection avec une autre zone, renvoie toujours vide, même si la ligne traverse dans l'autre zone. Vous avez été averti!
Area
objets peut se faire relativement facilement. Voici un exemple.Avertissement. Parce que vous pouvez de manière générique, l'utilisation de Java Zone de classe pour faire de collision/intersection de détection pour presque tous les produits Java 2D des objets graphiques, il est tentant de penser qu'il peut être utilisé pour TOUS les objets graphiques. Mais il ne peut pas être – parce que, si vous construisez un espace pour une "ligne" de la zone de la ligne elle-même commence à vide. Par conséquent, il est de l'intersection avec une autre zone, renvoie toujours vide, même si la ligne traverse dans l'autre zone. Vous avez été averti!
OriginalL'auteur Dan Hoynoski | 2013-03-20
Vous devez vous connecter pour publier un commentaire.
En utilisant les classes à partir de la 2D API Graphique.
Ce que cela ne vous dit pas, est là...
OriginalL'auteur MadProgrammer
Un rectangle est de 4 lignes. On peut calculer l'intersection entre votre ligne et les 4 lignes du rectangle.
donné les équations de deux droites, ils se coupent lorsque x et y sont égaux.
y = m1x + b1
y = m2x + b2
la résolution de l'équation que vous devriez obtenir:
x = b2 - b1 /(m1 - m2);
Noter que si m1 == m2, les lignes sont parallèles et ne sera jamais se croisent, attention au divisé par 0 dans ce cas.
Ensuite, car vous avez affaire à des segments de ratter que l'infini de lignes, de vérifier si l'intersection tombe dans vos segments (vérifier si X et Y sont à l'intérieur de chaque segment de limites).
Merci 🙂 Malade de jouer avec votre réponse 🙂 Merci
C'est un peu plus compliqué que ça - y = mx + c de représentation ne peut pas gérer des lignes verticales.
OriginalL'auteur loopkin
Retourne null si les lignes ne se croisent pas. Modifié du code c à partir d'une autre réponse à la même question pour le rendre Java. N'ont pas pris la peine d'examiner comment et pourquoi cela fonctionne, mais fait le travail, j'en avais besoin.
il est conforme à la ligne d'intersection, pas rectangle à l'intersection
OriginalL'auteur user2875504