Wie packe ich Polygone in ein anderes Polygon?

20

Ich habe ein paar Lederbögen bestellt, aus denen ich durch Zusammennähen von Kanten Jonglierbälle bauen möchte. Ich benutze die platonischen Körper für die Form der Kugeln.

Ich kann die Lederbögen scannen und ein Polygon erzeugen, das der Form des Lederbogens nahekommt (wie Sie wissen, handelt es sich um Tierhaut, die nicht in Rechtecken vorliegt).

Jetzt möchte ich die Größe meines Jonglierballs maximieren.

In meinem Beispiel sind die Polygone reguläre Polygone, aber ich suche nach einer Lösung mit einfachen Polygonen.

Was ist der größte Skalierungsfaktor, den ich auf meine Polygone anwenden kann, damit sie alle in das Blatt passen?

Ich versuche, den Abfall so gering wie möglich zu halten, indem ich so viel Material wie möglich verwende.

Offensichtlich vergrößert das Schneiden des Polyedernetzes in einzelne Polygone den Kombinationsspielraum, verringert jedoch auch die Qualität der endgültigen Geometrie, da mehr Nähfehler und Fehler auftreten. Bei dieser Frage geht es jedoch nicht darum, die verschiedenen Arten der Entfaltung eines Polyeders aufzuzählen. Sie können unabhängig voneinander betrachtet werden. Die Polygone sind also einfache Polygone.

Formal:

Eingang:

  • : ein einfaches Polygon (das Ziel)P
  • : Die Menge der Polygone, die ich platzieren möchteS
  • : ein Graph von n einfachen Polygonen - jeder Knoten repräsentiert ein einfaches Polygon in S , und es gibt eine Kantenkante zwischen jedem Paar von Polygonen, die eine gemeinsame Kante teilen GnS
  • (Materialverbrauch und Konnektivität)α> =0,β> =0

Ausgabe:

  • ein Skalierungsfaktor f
  • , ein Teilgraph von GHG
  • : ein Ort und ein Winkel für jedes Polygon in V ( G )LOcV(G)
  • ein Maß für die Qualität der Lösung: m = α . f + β . | E ( H ) |mm=α.f+β.|E(H)||E(G)|

Maximiere unter folgenden Bedingungen:m

  • (1)|V(H)|=|V(G)|
  • (2)|E(H)|<=|E(G)|
  • für jedes Polygon in S liegt S i, skaliert um einen Faktor f an der Stelle L o c ( S i ) innerhalb von P (3)SichSSichfLOc(Sich)P
  • Polygone in überlappen sich nicht (4)V(H)

(V (G) sind die Eckpunkte im Diagramm, und S ist die Menge der Polygone, aber sie beschreiben dieselbe Menge von Objekten. Vielleicht gibt es eine kompaktere Möglichkeit, dies zu tun.)

Erklärung der Bedingungen:

  • (1) Ich möchte, dass alle Polygone im endgültigen Layout sind
  • (2) Einige Verbindungen können bei Bedarf unterbrochen werden
  • (3) (4) Der Ball besteht aus Leder

Hier ist das Zielpolygon Lederbezug

Hier ist die Menge der Polygone, die ich packen möchte: Polyedernetz

Alecail
quelle
Sprechen Sie über konvexe Polygone, die Sie ausschneiden möchten?
A.Schulz
In meinem Fall sind Polygone regelmäßig, weil sie die Gesichter platonischer Körper sind. Aber das Packen einfacher Polygone sollte auch funktionieren. Warum möchten Sie wissen, ob die Polygone, die ich packen möchte, konvex sind?
Alecail
1
Wenn die Polygone nicht konvex sind, können Sie immer ein einzelnes nicht konvexes Polygon innerhalb des ursprünglichen Polygons ohne Schnitt platzieren. Diese Frage wäre also für allgemeine Polygone nicht sinnvoll.
A.Schulz
Ich weiß nicht, ob dies wichtig ist oder nicht, aber ist das umgebende Polygon (Leder) konvex oder kann es auch konkav sein?
Paresh
4
Selbst das viel einfachere Problem, die maximale Anzahl von Quadraten in ein Quadrat zu packen, stellt sich als schwierig heraus. Bewegen Sie die Polygone einfach mit der Hand, Sie wären wahrscheinlich nicht zu weit vom Optimum entfernt.
Vonbrand

Antworten:

3

Dies gehört zu einer Optimierungsklasse von Problemen, die als Verpackungsprobleme bezeichnet werden . In Ihrem Fall haben Sie anstelle eines regulären Polygons als Container ein unregelmäßiges, aber die Idee bleibt dieselbe.
Diese Optimierungsprobleme sind in der Regel nicht einfach zu lösen, und ich glaube nicht, dass es zu teuer wäre, alle Kombinationen auszuprobieren.
Es gibt einige Leute, die sich für diese Art von Problemen interessieren. Ich habe diesen Link von einigen gelösten spezifischen Verpackungsproblemen gefunden: http://www2.stetson.edu/~efriedma/packing.html

Der einfachste Weg, den ich sehe, besteht darin, eine ungefähre Mitte des Lederblatts zu definieren, die Menge der Polygone dorthin zu verschieben und durch Skalieren und Verkleinern und Überprüfen, ob die Menge der Polygone innerhalb des Zielpolygons liegt oder nicht, eine zu erhalten näher und näher Skalierungsfaktor 'f' für Ihre gewünschte Menge von Polygonen.

Aber wenn Sie diesen Faktor nicht für eine große Produktion von Jonglierbällen verwenden, ist es wahrscheinlich ausreichend, ihn von Hand zu machen.

Akronix
quelle