Decken Sie ein konkaves Polygon mit einer Mindestanzahl von Rechtecken ab

11

Ich versuche, ein einfaches konkaves Polygon mit einem Minimum an Rechtecken zu bedecken. Meine Rechtecke können beliebig lang sein, aber sie haben maximale Breiten, und das Polygon hat niemals einen spitzen Winkel.

Ich dachte darüber nach, mein konkaves Polygon in Dreiecke zu zerlegen, die einen Satz minimal überlappender Rechtecke erzeugen, die jedes Dreieck minimal begrenzen, und diese Rechtecke dann zu größeren zusammenzuführen. Ich denke jedoch nicht, dass dies für kleine Kerben in den Kanten des Polygons funktioniert. Die Dreiecke, die durch die Reflexscheitelpunkte in diesen Kerben erzeugt werden, erzeugen die falschen Rechtecke. Ich suche nach Rechtecken, die Kerben überspannen / ignorieren.

Ich weiß nicht wirklich etwas über Computergeometrie, daher bin ich mir nicht sicher, wie ich anfangen soll, die Frage zu stellen.

Ich habe andere Beiträge gefunden, die ähnlich waren, aber nicht das, was ich brauche:

Einige Beispiele: Schwarz ist die Eingabe. Rot ist die akzeptable Ausgabe.

Geben Sie hier die Bildbeschreibung ein

Ein weiteres Beispiel: Die zweite Ausgabe wird bevorzugt. Es ist jedoch wahrscheinlich notwendig, beide Ausgaben zu generieren und einen anderen Faktor zur Bestimmung der Präferenz zu verwenden, und nicht die Verantwortung dieses Algorithmus.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Polygone, die Kurven imitieren, sind äußerst selten. In diesem Szenario wird ein Großteil der Fläche der Rechtecke verschwendet. Dies ist jedoch akzeptabel, da jedes Rechteck die maximale Breitenbeschränkung einhält.

Geben Sie hier die Bildbeschreibung ein

Außerdem habe ich festgestellt, dass dieser Artikel genau dem entspricht, was ich brauche:

Vielleicht ist eine bessere Frage: "Wie kann ich rechteckige Teile eines konkaven Polygons identifizieren?" Geben Sie hier die Bildbeschreibung ein

Hier ist ein Bild, das die gewünschte Implementierung zeigt: Geben Sie hier die Bildbeschreibung ein

Das Grün ist der tatsächliche Materialverbrauch. Die roten Rechtecke sind die Layouts. Das Blau ist der MBR des gesamten Polygons. Ich denke, ich sollte versuchen, kleine MBRs zu bekommen und sie auszufüllen. Die 2-3 grünen Rechtecke in der oberen linken Ecke, die in der Mitte des Polygons enden, sind teuer. Das möchte ich minimieren. Die grünen Rechtecke haben eine minimale und maximale Breite und Höhe, aber ich kann so viele Zeilen und Spalten verwenden, wie zum Abdecken eines Bereichs erforderlich sind. Auch hier muss ich die Anzahl der Rechtecke minimieren, die sich nicht über die Eingabe erstrecken. Ich kann auch die Form des grünen Rechtecks ​​ändern, um sie an kleine Stellen anzupassen, was ebenfalls sehr teuer ist. Mit anderen Worten, es ist ideal, so viele Rechtecke wie möglich so weit wie möglich zu überspannen.

Josh C.
quelle
3
Ihr Titel sagt konvexe Polygone, aber die Frage spricht von konkaven Polygonen. Vielleicht müssen Sie einige Korrekturen vornehmen?
Ankur
1
@JukkaSuomela, in den ersten beiden Bildern ist das Polygon ungefähr gleich groß, und im ersten Bild hätte ich drei Rechtecke vertikal laufen lassen können, wie ich es im zweiten getan habe. Dies ist jedoch weniger wünschenswert. Ich denke, der Trick hat mit dem Umfang der Rechtecke zu tun. Vielleicht versuche ich, die Begrenzung des Rechtecks ​​innerhalb des Polygons zu minimieren und die Begrenzung zu maximieren, die mit den Kanten des Polygons kollinear ist. Manchmal müssen die Rechtecke jedoch aus dem Polygon herauslaufen, um es vollständig abzudecken.
Josh C.
1
@ JohnMoeller, ich verstehe. Dies ist ein Problem, bei dem ein Mensch die Lösung leicht identifizieren kann, die korrekte Angabe des Problems jedoch recht schwierig ist. Das Problem ähnelt dem Verlegen von Teppichen oder Tapeten, und das eigentliche Problem ist ein strukturelles / architektonisches. Ich versuche, Bereiche mit rechteckigen Layouts zu identifizieren, die später mit einer anderen Form der Tesselation gefüllt werden. Das Problem besteht darin, diese Rechtecke zu finden und die nicht rechteckigen Bereiche zu behandeln. Lassen Sie mich wissen, ob ich mehr erklären kann.
Josh C.
2
Ich denke, wir sollten dies zunächst als Modellierungsfrage betrachten: Das Ziel besteht nicht darin, einen Algorithmus zu entwickeln, der ein genau definiertes Optimierungsproblem löst, sondern das Optimierungsproblem zu definieren.
Jukka Suomela
3
@JoshC.: Vielleicht wäre es auch hilfreich, wenn Sie uns mehr über die reale Anwendung erzählen würden. Aus Ihrer Beschreibung geht hervor, dass beispielsweise das Schneiden ziemlich teuer ist - im Idealfall würden die rechteckigen Teile so wenig wie möglich geschnitten. Ist das richtig?
Jukka Suomela

Antworten:

3

Dies ist eine Variante der geometrischen Setabdeckung. Abhängig von den genauen Einstellungen können Sie möglicherweise eine gute Annäherung vornehmen. Das Problem ist natürlich NP-Hard. Die natürliche Huersitik besteht darin, einen gierigen Algorithmus zu verwenden (wählen Sie immer das Rechteck / den Streifen aus, das den größten noch nicht abgedeckten Bereich abdeckt. Die alternative Technik ist das Wiegen. Es gibt einige interessante theoretische Ergebnisse, aber ehrlich gesagt nichts, was in der Praxis zu nützlich sein sollte Eine interessante Hueristik, die Sie vielleicht ausprobieren möchten, besteht darin, Ihr Polygon zunächst in eine minimale Anzahl konvexer Formen zu zerlegen (mithilfe des dynamischen Programmieralgorithmus von Keil) und dann jedes konvexe Polygon separat abzudecken ...

Sariel Har-Peled
quelle
Ich bin mit dem Keil Dynamic Programming-Algorithmus nicht vertraut. Ich habe jedoch eine Methode gefunden, um mit einer Kombination der Algorithmen für das größte eingeschriebene Rechteck und das Minimum-Bounding-Rechteck mit einigen auf Heuristiken basierenden Varianten zu arbeiten.
Josh C.
2

Ich denke, dieses Papier kann hilfreich sein. Offensichtlich ist es nicht dasselbe Problem - tatsächlich ist es das umgekehrte Problem, ein Rechteck mit Polygonen zu bedecken -, aber einige der Ideen könnten ein Ausgangspunkt sein. Insbesondere ist dieses umgekehrte Problem NP-schwer und ich vermute, dass es auch Ihr Problem ist (obwohl es, soweit ich das beurteilen kann, keine offensichtliche Erweiterung der Reduzierung gibt).

E. Arkin, A. Efrat, G. Hart, I. Kostitsyna, A. Kroller, J. Mitchell und V. Polishchuk. Skandinavische Ausdünnung auf Kuchen: Auf der kleinsten Einheitsbox. Spaß mit Algorithmen . S. 16-27. 2012

SamM
quelle
1
Danke für deinen Vorschlag. Ich habe mit den Konstruktions- und Fertigungsabteilungen meines Unternehmens zusammengearbeitet, um dieses Problem besser zu klären. Ich warte immer noch auf eine Bestätigung, aber ich denke jetzt, dass ein Algorithmus funktionieren würde, der Sätze der größten beschrifteten Rechtecke zurückgeben würde. Während es die Form nicht vollständig abdeckt, würde es den orthognalen Regionen den Vorzug geben, während die nicht orthogonalen Regionen einigen Heuristiken überlassen würden. Der einzige Trick besteht darin, diese orthogonalen Bereiche zu maximieren. Siehe mein letztes Bild mit den 9 lamdaähnlichen Figuren.
Josh C.