Betrachten Sie einen Bereich (2D), der zufällig mit Linien gefüllt ist (folgende Abbildung). Wir sind daran interessiert, die Leerstellen zwischen den Zeilen einschließlich der vier Begrenzungskanten auf eine Art und Weise zu füllen:
0- Maximierung der Paketgröße;
Die Form der Füllpakete ist quadratisch, horizontal oder vertikal ausgerichtet.
2- Form der Füllpakete ist quadratisch, dh entspannte Ausrichtung ;
3- Form der Füllpakete ist ein beliebiges Viereck. unsere ursprüngliche Frage
Im Moment gibt es also drei verschiedene Szenarien.
Beachten Sie, dass die Linien die Form eines [x1,y1,x2,y2]
Punktes haben, dh reelle Zahlen.
[* * *] Ideen für mögliche Lösungen / Algorithmen / Code-Schnipsel / etc sind mehr als willkommen.
Update 1: Wir könnten eine Lösung für den ersten Fall verwalten:
Schritte sind:
1 - Zeilen
2 - Rastern von Zeilen in eine Bitmap
3 - Suchen in der Nähe befindlicher Zellen für jede Zelle der gewünschten Farbe (dh der gleichen Farbe) mit einer Zielfunktion zum Maximieren die Fläche, dh die Anzahl der Zellen.
Es funktioniert gut, deckt jedoch nur das erste Szenario ab und ist auch langsam.
Update 2:
Wir gingen davon aus, dass der Leser mit dem Konzept der raumfüllenden Kacheln vertraut ist. Sie können dem Link folgen, um sich inspirieren zu lassen. Beachten Sie jedoch, dass unser Problem anders ist. Da wir den leeren Raum nicht zufällig füllen und die Größe nicht zufällig wählen. Die Lösung sollte iterativ sein. In allen Fällen gibt es keine Begrenzung für die Anzahl der einzusetzenden Pakete. Es ist in der Tat Sache des Benutzers, die Iterationszahl zu begrenzen, indem er beispielsweise einen Mindestbereich für Pakete auswählt. Dies ist in dem oben angegebenen Beispiel offensichtlich, in dem wir Zeilen in Pixel mit der angegebenen Größe diskretisiert haben. Das heißt, die Prozedur sollte so lange ausgeführt werden, bis der gesamte leere Bereich unter Berücksichtigung des Kriteriums, z. B. der maximalen Fläche der Pakete, gefüllt ist.
Update 3:
Zusammenfassung:
Eine Anwendung besteht darin, die Verteilung von extrahierbaren, intakten "Gesteinsblöcken" in einer stark zerbrochenen "Mine" herauszufinden. Dies kann unter vielen Aspekten, einschließlich der Bohrplanung, der finanziellen Bewertung usw., sehr hilfreich sein.
Beschreibung:
Bei einer Mine aus dekorativem Gestein (Stein) ist der Preis stark von der Größe der Steine abhängig Block. Die Extraktion eines Blocks aus einem geeigneten Bereich, dh ohne größeren Bruch, ist erwünscht, wenn die Menge der verbleibenden Teile so gering wie möglich ist. In der Regel haben die kleinen Gesteinsstücke keinen relativen wirtschaftlichen Wert und werden daher als Abfall betrachtet.
Die Frage in diesem Beitrag untersucht Lösungen für diese Art von Problem.
Eine mathematische Ansicht für das Problem kann wie folgt angegeben werden:
2D: Finden Sie alle Rechtecke, die aus einem bestimmten 2D-Bereich extrahiert werden könnten, wobei einige Linien für eine möglichst große Rechteckgröße optimiert sind.
3D: Finden Sie alle rechteckigen Würfel, die aus einem bestimmten 3D-Bereich mit einigen Unterebenen (besser: Polygone) extrahiert werden können, die für eine möglichst große Blockgröße optimiert sind.
Da dies Teil einer laufenden Forschung ist, haben einige der in den Kommentaren unten gestellten Fragen keine bestimmten Antworten, die wir bereitstellen können. Wir sind der Meinung, dass die hier bisher zur Verfügung gestellten Informationen tatsächlich ausreichen, um ein Gesamtbild des Problems zu erhalten. Trotzdem stellen wir einige Details zur Verfügung, die wir für die Allgemeinheit nutzen können.
Sie können die Lösung für die letzte Frage einschränken, obwohl wir glauben, dass es immer möglich ist, später mehr hinzuzufügen. Beispielsweise folgendermaßen: {} 2D - Fall
die beste Größe eines Blockes (wirtschaftlich optimales Rechteck) unter den Bedingungen extrahiert wird oben erwähnt, wird 1x1 m
angegeben 10x10 m
für die Region in dem Beispiel. Dies ist eine Einschränkung, die basierend auf dem wirtschaftlichen Wert definiert wird. Die minimal bearbeitbare Größe zum Schneiden etc, sei0.15x0.15 m
; also dies ist die zweite größenbeschränkung.
Die obige Abbildung zeigt die ökonomische Wertfunktion in Abhängigkeit von der Blockgröße. Für diesen speziellen Fall ist also jedes Steinstück, das kleiner ist als 0.15x0.15 m
nur Abfall. Es gibt keine Blockgröße, die größer ist als 1.7x1.7 m
aufgrund von Betriebsgrenzen.
Antworten:
Ich habe eine Idee, wie Sie iterativ mit FME von großen Blöcken zu kleineren Blöcken arbeiten (von Safe Software). Ich arbeite nicht für sie, aber ich scheine ihr Werkzeug genug zu loben ...
Spülen Sie und wiederholen Sie so oft wie nötig mit jeweils kleineren Fliesen. Ich habe den Start einer Workbench angehängt, die ich als einen Ansatz verwenden würde.
Basierend auf Ihrer (sehr detaillierten) Beschreibung funktioniert dies vorerst nur mit Ihrer Option 1. Ohne gerade noch zu viel Zeit aufzuwenden.
Jedenfalls ist dies nur ein Ansatz, mit dem ich anfangen würde, um zumindest die Spreu vom Weizen zu filtern.
quelle