Ich möchte ein zweidimensionales Layout aus rechteckigen Formen erstellen, ein Gitter aus zufällig großen Würfeln. Der Würfel sollte zusammenpassen und die gleiche Polsterung oder den gleichen Rand (Abstand dazwischen) haben. Ein bisschen wie ein Comic-Layout oder eher wie das angehängte Bild.
Wie könnte ich das prozedural machen?
Praktisch würde ich wahrscheinlich Python und eine Grafiksoftware verwenden, um ein Bild zu rendern, aber ich kenne nicht die Art von Algorithmus (oder was auch immer), die ich zum Generieren des zufälligen Rasters verwenden müsste.
programming-practices
python
math
Mrwolfy
quelle
quelle
Antworten:
Beginnen Sie mit einem Raster von 1x1 Zellen. Wählen Sie einen zufälligen Punkt aus, führen Sie Zellen in zufälliger Menge zusammen oder bis sie mit einem größeren Rechteck kollidieren.
Dadurch erhalten Sie etwas Ähnliches wie das von Ihnen bereitgestellte Bild.
Es gibt größere Probleme, wenn Sie nicht möchten, dass mehrere kleinere Zellen als Polster zwischen Ihren größeren Zellen fungieren. Ein Comic zum Beispiel möchte den Totraum minimieren und höchstens ~ 9 Zellen haben. Sie könnten einige Punkte auswählen und einige Linien zeichnen und diese Ihre Zellen nennen.
Es gibt viel mehr Möglichkeiten, eine Katze zu häuten.
quelle
Fügen Sie das Quadrat einem leeren Array hinzu.
Für jedes Quadrat im Array:
Am Ende des Prozesses haben Sie eine Reihe von zufällig großen Quadraten. Beachten Sie, dass Sie wahrscheinlich eine Mindestgröße (zu diesem Zeitpunkt erfolgt keine weitere Teilung mehr) und eine Höchstgröße (wenn das Quadrat größer ist, unabhängig vom Booleschen Wert immer teilen) definieren möchten.
quelle
Bestimmen Sie die Größe und Geometrie des Bildes. Wenn Sie möchten, dass dies gekachelt wird, ist die zugrunde liegende Geometrie die eines Torus.
Pflegen Sie eine Liste der oberen linken Ecke aller möglichen Formen. Dies ist zunächst jeder mögliche Punkt.
Wählen Sie ein Rechteck mit zufälliger Größe (innerhalb der von Ihnen festgelegten Einschränkungen - im Beispielbild handelt es sich um Quadrate mit einer maximalen Größe von 4). Platzieren Sie dieses Rechteck an einer zufälligen Stelle in der oberen linken Ecke.
Wenn das Rechteck zu groß ist (überlappt einen vorhandenen zugewiesenen Punkt), schneiden Sie die Abmessung des Rechtecks so, dass es passt.
Entfernen Sie alle von diesem Rechteck abgedeckten Stellen aus der Liste der möglichen oberen linken Ecken.
Wiederholen, bis die Liste der oberen linken Ecken leer ist.
Rendern Sie das resultierende Array auf Ihre bevorzugte Weise. Hier würden Sie einen Rand einführen.
Wenn Sie mit einer bestimmten Grafikbibliothek nicht vertraut sind, sollten Sie das ppm-Format verwenden . Der Hauptvorteil besteht darin, dass Sie eine Textdatei schreiben und dann einen der Konverter (ppmto___) verwenden können, um das Bild in das von Ihnen gewählte Format zu konvertieren (ppmtogif. Ppmtojpeg, ...).
quelle