Algorytm podziału prostokąta

0

Witam wszystkich serdecznie,

Poszukuję algorytmu, który podzieli mi powierzchnię prostokąta na mniejsze elementy (prostokąty lub kwadraty). Dane wejściowe to liczby o określonej wadze.
Przykładowo danymi wejściowymi będzie 2 1 1. Wówczas wiem że pierwszy element zajmie 50% powierzchni i pozostałe dwa po 25%. Problemem jest ustalanie wielkości boków elementów jak również rozmieszczenie tych elementów w prostokącie.

Pozdrawiam.

0

Nie rozumiem twojego problemu, dzielisz pionowymi fragmentami o szerokości: w=W*a(i)/sum(a(1..n)); Z sumowaniem masz problem?

0

_13th_Dragon dzięki za uwagę. Faktycznie to nie byłby problem. Zapomniałem dodać, że stosunek boków elementów ma być jak najmniejszy. Czyli przy wagach 60 20 20 powinny zostać utworzone elementy 6×10 4×5 4×5.

0

Wydaje mi się, że to może chodzić o coś takiego.
user image

choć w tym efekcie powyżej widać zarysy kolejny kwadratów zbliżonych do tego zielonego, widziałem podział budżetu Polski gdzie to było ładniej wydzielone z samych prostokątów.

sam z ciekawością poczytałbym jak uzyskać taki efekt z dowolnych danych, dobrze się w ten sposób prezentuje włąśnie podział środków budżetowych na wszystkie wydatki.
Czy to może mieć coś wspólnego ze złotym podziałem?
http://pl.wikipedia.org/wiki/Z%C5%82oty_podzia%C5%82

Edit:
Jeszcze jeden tym razem ładniejszy
user image

0

Varran — dokładnie o takie coś mi chodziło. Dzięki za doprecyzowanie tematu.

0

sortujesz malejąco

#od pierwszego elementu sumujesz kolejne wartości aż do osiągnięcia jakiegoś procentu pokrycia (np 30% - wartość uzależniasz od proporcji prostokąta - tu siedzi spora część problemu - zrobiłbym tak, że dla kwadratu jest to 50%, a dla nieskończenie długiego prostokąta 0%).
#Wydzielasz z prostokąta odpowiedni prostokąt (krawędź wspólna krótszy bok głównego prostokąta)
#Dla wyznaczonej podgrupy rekurencyjnie powtarzasz algorytm.
#Dla pozostałych wartości i pozostałej części prostokąta wykonujesz rekurencyjnie algorytm.

1 użytkowników online, w tym zalogowanych: 0, gości: 1