Problème avec des Rectangles

Signaler
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Bonjour à tous,

Je dois faire un truc à priori assez simple, mais impossible d'y arriver. Le but est tout simplement de supprimer un rectangle d'un autre.

Donc si j'ai deux rectangles qui se superposent, je récupère l'intersection puis j'enlève l'intersection à un des deux Rectangles. Le résutat n'est pas forcément un Rectangle, dans ce cas, il faut décomposer la forme obtenue pour arriver au final à un ensemble de Rectangle.
Mon problème est principalement du au fait qu'une ligne est également un Rectangle, et qu'un point peut aussi être un Rectangle... Il faut donc être capable de supprimer cet ensemble d'élément d'un Rectangle. Le cas où on supprimne un Rectangle d'un Rectangle :

Au final, il nous reste donc deux rectangles distincts qui ne se superposent pas (le carré du dessous fini à x et le rectangle en dessus commence à x+1). C'est à dire que les bords ne se superposent pas non plus!

<hr size="2" />VC# forever

5 réponses

Messages postés
546
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
4 mai 2007
1
Et concretement le problème se situe où ?
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
Il se situe dans le fait que l'intersection entre deux rectangles peut donner UN rectangle, DES rectangles, UNE ligne, voire même un point.
J'ai réussi à bricoler quelque chose qui marche, mais ça ne me plaît pas du tout. Je ne donne pas la solution car elle fait intervenir tout un tas d'autre class qui ne font pas partie du framework et comme je l'ai dit, la solution n'est certainement pas la meilleure !

<hr size="2" />VC# forever
Messages postés
546
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
4 mai 2007
1
Personnellement je traiterais chaque cas possible ( j'en vois 12 différents )
puis je ferais un test sur les nouveaux rectangles crées pour voir leur taille : si celle ci est de 1 pixel de haut ou de large c'est une ligne ou les 2 alors c'est un point.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
Non y'en a bien plus que 12 et selon moi y'a une manière plus simple que de traiter chaque cas séparemment...
Si jamais je trouve une solution qui soit propre, je viendrai la donner.

<hr size="2" />VC# forever
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
52
Bon, j'ai trouvé une bonne solution, je donne quelques explications sur mon blog ainsi qu'une class qui permets de faire la décomposition en fichier attaché.

<hr size="2" />VC# forever