J'essaie de couvrir un simple polygone concave avec un minimum de rectangles. Mes rectangles peuvent avoir n'importe quelle longueur, mais ils ont des largeurs maximales, et le polygone n'aura jamais d'angle aigu.
J'ai pensé à essayer de décomposer mon polygone concave en triangles qui produisent un ensemble de rectangles se chevauchant au minimum délimitant au minimum chaque triangle, puis à fusionner ces rectangles en plus grands. Cependant, je ne pense pas que cela fonctionnera pour les petites encoches dans les bords du polygone. Les triangles créés par les sommets réflexes sur ces encoches créeront les mauvais rectangles. Je recherche des rectangles qui s'étendent / ignorent les encoches.
Je ne sais vraiment rien de la géométrie informatique, donc je ne suis pas vraiment sûr de savoir comment commencer à poser la question.
J'ai trouvé d'autres articles similaires, mais pas ce dont j'ai besoin:
- diviser le polygone en un minimum de rectangles et de triangles
- Couvrir un polygone arbitraire avec un nombre minimum de carrés
- Trouvez rectangles pour qu'ils couvrent le nombre maximum de points
- Algorithme pour trouver le moins de rectangles pour couvrir un ensemble de rectangles
Quelques exemples: le noir est l'entrée. Le rouge est la sortie acceptable.
Un autre exemple: la deuxième sortie est préférable. Cependant, la génération des deux sorties et l'utilisation d'un autre facteur pour déterminer la préférence sont probablement nécessaires et ne relèvent pas de la responsabilité de cet algorithme.
Les polygones qui imitent les courbes sont extrêmement rares. Dans ce scénario, une grande partie de la surface des rectangles est gaspillée. Cependant, cela est acceptable car chaque rectangle obéit à la contrainte de largeur maximale.
Aussi, j'ai trouvé cet article proche de ce dont j'avais besoin:
- Recouvrement de pièces rectangulaires par Paul Iacob, Daniela Marinescu et Cristina Luca
Peut-être une meilleure question est "Comment puis-je identifier des parties de type rectangulaire d'un polygone concave?"
Voici une image montrant l'implémentation souhaitée:
Le vert est l'utilisation réelle du matériau. Les rectangles rouges sont les dispositions. Le bleu est le MBR de tout le polygone. Je pense que je devrais essayer d'obtenir de petits MBR et de les remplir. Les 2-3 rectangles verts dans le coin supérieur gauche qui se terminent au milieu du polygone sont chers. C'est ce que je veux minimiser. Les rectangles verts ont une largeur et une hauteur min et max, mais je peux utiliser autant de lignes et de colonnes nécessaires pour couvrir une région. Encore une fois, je dois minimiser le nombre de rectangles qui ne s'étendent pas sur l'entrée. Je peux également modifier la forme du rectangle vert pour l'adapter aux petits endroits, ce qui est également très cher. En d'autres termes, obtenir autant de rectangles que possible pour s'étendre autant que possible est idéal.