Méthode Java pour trouver le rectangle qui est l'intersection de deux rectangles en utilisant seulement le point inférieur gauche, la largeur et la hauteur?
J'ai trouvé la solution, mais voulait s'assurer que ma logique est la plus efficace. Je sens qu'il ya une meilleure façon. J'ai l' (x,y) les coordonnées du coin inférieur gauche, la hauteur et la largeur de 2 rectangles, et j'ai besoin de revenir un troisième rectangle qui est leur point d'intersection. Je ne veux pas poster le code que je ressens c'est de la triche.
- - Je savoir qui est le plus à gauche et plus haut sur le graphique.
- - Je vérifier si l'on recouvre complètement l'autre, et l'inverse pour voir si l'autre recouvre complètement la première sur l'axe des X.
- - Je vérifier pour une partie d'intersection sur l'axe des X.
- En gros, j'ai répétez les étapes 2 et 3 pour l'axe des Y.
- Je fais un peu de maths et obtenir les points du rectangle en fonction de ces conditions.
J'ai peut-être plus de cette pensée et de l'écriture inefficace code. J'ai déjà tourné dans un programme de travail, mais aimerait trouver la meilleure façon pour mes propres connaissances. Si quelqu'un pouvait soit d'accord ou me diriger dans la bonne direction, ce serait génial!
source d'informationauteur Doug B
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas utiliser le JDK API pour le faire pour vous?
À utiliser
java.awt.Rectangle
classe, les paramètres du constructeur sont les suivantes: x, y, largeur, hauteur, dans laquelle x, y du coin supérieur gauche du rectangle. Vous pouvez facilement convertir les bas-point à gauche à en haut à gauche.Je recommande ci-dessus, mais si vous voulez vraiment le faire vous-même, vous pouvez suivre les étapes ci-dessous:
dire
(x1, y1), (x2, y2)
sont en bas à gauche et en bas à droite de Rect1 respectivement,(x3, y3), (x4, y4)
sont ceux de Rect2.x1
x3
et la plus petite dex2
x4
direxL
xR
respectivementxL >= xR
puis retour pas d'intersection d'autrey1
y3
et la plus petite dey2
y4
direyT
yB
respectivementyT >= yB
puis retour pas d'intersection d'autre(xL, yB, xR-xL, yB-yT)
.Plus Java-comme le pseudo-code:
Comme vous le voyez, si votre rectangle a été défini à l'origine par deux diagonales coins, il sera plus facile, il vous suffit de faire la
//find intersection
partie.Accepté la réponse est incorrecte. Voici ma version, ce qui est correct.
N'utilisez pas la accepté de répondre.
Vous pouvez également utiliser le Rectangle de code source pour comparer avec votre propre algorithme: