Automatyczne rozmieszczenie prostokątnych obiektów na TPanel

0

Witam,

Nie wiem jak podejść do takiego tematu:

Dynamicznie generuję sobie obiekty (prostokąty) o różnych wymiarach. Następnie chciałbym automatycznie wpisać (rozmieścić) te obiekty na obiekcie 'tpanel' w kształcie większego prostokąta, czyli należy poszukać taką kombinację, aby te obiekty (poukładane obok siebie) zmieściły się na 'TPanel'. Oczywiście jeżeli jakiś obiekt jest zdecydowanie za duży (za szeroki lub za długi), to wyrzuca go do jakiejś listy (tu akurat najmniejszy problem).

Jeżeli ktoś z Państwa ma jakiś pomysł na to zadanie, to proszę o podpowiedź.

Janek

0

Wygląda to jak bot do tetrisa, możliwe że nie ma idealnej kombinacji przy losowej wartości, ale można np. pociąć ekran na losowe części nie większe niż pozostawione przez poprzednie cięcia wtedy wszystkie kawałki layouta się zmieszczą.

0

@JaJanek: ile możesz mieć tych dynamicznie tworzonych prostokątów? To kluczowa informacja.

Poza tym, dlaczego chcesz je umieścić na panelu? A tak w ogóle to tymi obiektami są komponenty, czy tylko chcesz je na tym panelu namalować? Podaj więcej szczegółów, bo trudno tu o konkretną odpowiedź.

0

@furious programming:
Czy to jest Tpanel, czy cokolwiek innego, ma zupełnie drugorzędne znaczenie.
Problem jest czysto numeryczny do tego z optymalizacją.
Temat wątku bardziej pasuje do kategorii 'Algorytmy i struktury danych'

0
grzegorz_so napisał(a):

Czy to jest Tpanel, czy cokolwiek innego, ma zupełnie drugorzędne znaczenie.

Drugorzędne? Zupełnie czymś innym jest operowanie i ustawianie w całości wirtualnych mikro-struktur, a czymś innym jest operowanie na grupie komponentów. W teorii jedno i drugie tak samo się układa, ale nie w praktyce.

Przykładowy sposób – określenie wejściowej listy obiektów i wymiarów obszaru, na którym mają być poukładane obiekty. Na wyjściu algorytm wypluwa listę obiektów z ich współrzędnymi w obszarze. Nie wiem ile tych obiektów ma być, jednak na początek można spróbować rekurencyjny brute-force.

0

Oczywiście że drugorzędne.
Sam w przykładowym sposobie pokazałeś że tak jest.
Operuje się na obiektach, prostokątach, czyli czterech liczbach, bo tyle wystarczy aby zdefiniować prostokąt w dwuwymiarowym kartezjańskim układzie , a potem można je narysować na wiele sposobów, nawet na kartce papieru.

0
grzegorz_so napisał(a):

Operuje się na obiektach, prostokątach, czyli czterech liczbach […]

Do obliczeń tak, ale nie do ułożenia pomiędzy obliczeniami. Czym innym jest modyfikacja wirtualnych czterech liczb, a czym innym modyfikacja np. ClientRect-u kontrolki (to wiąże się z masą pobocznych czynności, wpływających na efektywność algorytmu).

Oczywiście nic nie stoi na przeszkodzie, aby zmapować obiekty do prostych wirtualnych struktur, poustawiać im współrzędne i na koniec zaktualizować kontrolki hurtowo.

0

Elementów do rozmieszczenia jest tak naprawdę X (użytkownik definiuje ilość). Dodatkowo użytkownik definiuje rozmiary tych prostokątów.

0

Oczywiście nic nie stoi na przeszkodzie, aby zmapować obiekty do prostych wirtualnych struktur, poustawiać im współrzędne i na koniec zaktualizować kontrolki hurtowo.

Problem jest wirtualny (numeryczny) i sam z siebie nie ma nic wspólnego z jakimikolwiek kontrolkami

Do obliczeń tak, ale nie do ułożenia pomiędzy obliczeniami. Czym innym jest modyfikacja wirtualnych czterech liczb, a czym innym modyfikacja np. ClientRect-u kontrolki (to wiąże się z masą pobocznych >czynności, wpływających na efektywność algorytmu).

co chcesz układać pomiędzy obliczeniami ? algorytm ma "wypluć" gotowy wynik który można zwizualizować w dowolny sposób, również na kartce papieru

0

@JaJanek: Twój problem nic nie ma wspólnego z pascalem czy delphi. Umieść go w kategorii "Algorytmy i struktury danych"
Twoim problemem jest algorytm numeryczny, a ten możesz zaimplementować w niemal każdym języku programowania.
rzuć okiem na to :
http://www-users.mat.uni.torun.pl/~henkej/knapsack.pdf

0
grzegorz_so napisał(a):

@JaJanek: Twój problem nic nie ma wspólnego z pascalem czy delphi. Umieść go w kategorii "Algorytmy i struktury danych"

Przecież on ma projekt w Delphi, który ma obsługiwać rozmieszanie obiektów, więc jak nie ma nic wspólnego? Jak pytacz chce to może założyć wątek w kategorii Algorytmy i struktury danych i w nim zapytać o dobór odpowiedniego algorytmu, a w tym pytać o szczegóły implementacyjne w bieżącym projekcie.

JaJanek napisał(a):

Elementów do rozmieszczenia jest tak naprawdę X (użytkownik definiuje ilość). Dodatkowo użytkownik definiuje rozmiary tych prostokątów.

Zobacz do tego wątku: https://stackoverflow.com/questions/1213394/what-algorithm-can-be-used-for-packing-rectangles-of-different-sizes-into-the-sm – problem dokładnie ten sam i jest w nim podanych kilka różnych sposobów.

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