Jak spakować wielokąty wewnątrz innego wielokąta?


20

Zamówiłem kilka skórzanych prześcieradeł, z których chciałbym budować kuglarskie piłki, łącząc ze sobą krawędzie. Używam brył platońskich do kształtowania kulek.

Mogę zeskanować skórzane prześcieradła i wygenerować wielokąt zbliżony do kształtu skórzanego prześcieradła (jak wiecie, jest to skóra zwierzęca i nie ma prostokątów).

Chciałbym teraz zmaksymalizować rozmiar mojej żonglującej piłki.

W moim przykładzie wielokąty są regularne, ale szukam rozwiązania z prostymi wielokątami.

Jaki jest największy współczynnik skali, jaki mogę zastosować do moich wielokątów, aby wszystkie pasowały do ​​arkusza?

Staram się zminimalizować marnotrawstwo, używając jak największej ilości materiału.

Oczywiście, przecięcie siatki wielościanu na indywidualny wielokąt zwiększy przestrzeń możliwej kombinacji, ale także obniży jakość ostatecznej geometrii, ponieważ wiąże się to z większą ilością szycia i nagromadzeniem błędów. Ale to pytanie nie dotyczy wyliczenia różnych sposobów rozkładania wielościanu. Można je rozpatrywać niezależnie. Wieloboki są więc prostymi wielobokami.

Formalnie:

Wkład:

  • : prosty wielokąt (cel)P.
  • : zbiór wielokątów, które chcę umieścićS.
  • : wykres n prostych wielokątów - każdy węzeł reprezentuje prosty wielokąt w S , a między każdą parą wielokątów, które mają wspólną krawędź, jest jedna krawędź krawędzi solnS.
  • (zużycie materiału i łączności)α> =0,β> =0

Wynik:

  • współczynnik skali fa
  • , podgrupa GH.sol
  • : położenie i kąt dla każdego wielokąta w V ( G )L.odoV.(sol)
  • miara jakości rozwiązania: m = α . f + β . | E ( H ) |mm=α.fa+β.|mi(H.)||mi(sol)|

Maksymalizuj zgodnie z następującymi warunkami:m

  • (1)|V.(H.)|=|V.(sol)|
  • (2)|mi(H.)|<=|mi(sol)|
  • dla każdego wieloboku w S , S i skalowany przez współczynnik F w miejscu L O c (S.jaS.S.jafa znajduje się wewnątrz P (3)L.odo(S.ja)P.
  • wielokąty w nie nakładają się (4)V.(H.)

(V (G) są wierzchołkami na wykresie, a S jest zbiorem wielokątów, ale opisują ten sam zestaw obiektów. Być może istnieje bardziej zwarty sposób.)

Objaśnienie warunków:

  • (1) Chcę, aby wszystkie wielokąty były w ostatecznym układzie
  • (2) Niektóre połączenia mogą zostać przerwane w razie potrzeby
  • (3) (4) piłka wykonana jest ze skóry

Oto docelowy wielokąt Prześcieradło skórzane

Oto zestaw wielokątów, które chcę spakować: Siatka wielościanowa


Czy mówisz o wypukłych wielokątach, które chcesz wyciąć?
— A.Schulz

W moim przypadku wielokąty są regularne, ponieważ są powierzchniami brył platońskich. Ale pakowanie prostych wielokątów również powinno działać. Dlaczego chcesz wiedzieć, czy wielokąty, które chcę spakować, są wypukłe?
— alecail

1
Jeśli wielokąty są niewypukłe, zawsze możesz umieścić pojedynczy niewypukły wielokąt w oryginalnym wielokącie bez cięcia. To pytanie nie miałoby więc sensu dla ogólnych wielokątów.
— A.Schulz

Nie wiem, czy to ważne, czy nie, ale czy obwiednia wielokąta (skóry) jest wypukła, czy też może być wklęsła?
— Paresh,

4
Nawet o wiele prostszy problem upakowania maksymalnej liczby kwadratów w kwadracie okazuje się trudny (przepraszam, nie mam przydatnego linku, ale natknąłem się na dyskusję o tym kilka miesięcy temu). Po prostu żongluj wielokątami ręcznie, prawdopodobnie nie będziesz zbyt daleko od optymalnego.
— vonbrand

Odpowiedzi:


3

Należy to do klasy optymalizacji problemów zwanej Problemy z pakowaniem . W twoim przypadku zamiast zwykłego wielokąta jako pojemnika masz nieregularny, ale pomysł pozostaje ten sam.
Te problemy z optymalizacją są zwykle trudne dla NP, więc nie sądzę, że istnieje prosty sposób na uzyskanie dokładnego rozwiązania, a wypróbowanie wszystkich kombinacji byłoby zbyt kosztowne.
Są ludzie zainteresowani tego rodzaju problemami; Znalazłem ten link niektórych rozwiązanych problemów z pakowaniem: http://www2.stetson.edu/~efriedma/packing.html

Najłatwiejszy sposób, jaki widzę, to zdefiniowanie przybliżonego środka skórzanego prześcieradła, przeniesienie zestawu wielokątów tam i poprzez skalowanie w górę i w dół i sprawdzenie, czy zestaw wielokątów znajduje się wewnątrz wielokąta docelowego, aby uzyskać coraz bliżej współczynnik skali „f” dla pożądanego zestawu wielokątów.

Ale chyba, że ​​zamierzasz użyć tego czynnika do produkcji piłek żonglerkowych na dużą skalę, prawdopodobnie zrobienie tego ręcznie byłoby wystarczające.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.