2010-03-28 16 views
6

mam zestaw N liczby dodatnie, a prostokąt o wymiarach X i Y że trzeba podzielić na N mniejsze prostokąty takie, że:podziału prostokąta w bliskiej kwadratów danych obszarach

  • powierzchnia każdego mniejszego prostokąta jest proporcjonalny do jego odpowiedniej liczby w danym zbiorze
  • wszystkim przestrzeń dużego prostokąta jest zajęty i nie ma resztki przestrzeń pomiędzy mniejszych prostokątów
  • każdy mały prostokąt powinien mieć kształt kwadratu blisko jak to możliwe
  • czas realizacji powinny być rozsądnie małe

muszę kierunki na ten temat. Czy znasz taki algorytm opisany w Internecie? Czy masz jakieś pomysły (pseudo-kod jest w porządku)?

Dzięki.

Odpowiedz

8

Co można opisać dźwięki jak treemap:

Diagramy wyświetlić hierarchicznych (tree-strukturyzowane) dane jako zbiór zagnieżdżonych prostokątów. Każdemu odgałęzieniu drzewa nadaje się prostokąt, który następnie jest układany z mniejszymi prostokątami reprezentującymi gałęzie. Prostokąt węzła liścia ma obszar proporcjonalny do określonego wymiaru danych.

że Wikipedia strona linki do a page by Ben Shneiderman, co daje ładny przegląd i linki do implementacji Java:

Potem natomiast zastanawiające o tym w salonie wydziału, miałem Aha! doświadczenie dzielenia ekranu na prostokąty w naprzemiennych kierunkach poziomych i pionowych podczas przechodzenia w dół poziomów. Ten rekurencyjny algorytm wydawał mi się atrakcyjny, ale zajęło mi kilka dni, aby przekonać się, że zawsze będzie działać i napisać algorytm sześcio-liniowy.

Wikipedia także "Squarified Treemaps" by Mark Bruls, Kees Huizing and Jarke J. van Wijk (PDF), który przedstawia jeden z możliwych algorytmu:

Jak możemy tesselate prostokąt rekurencyjnie w prostokąty, tak, że ich Aspect-wskaźniki (np Max (wysokość/szerokość, szerokość/wysokość)) podejść 1 tak blisko, jak to możliwe? Liczba wszystkich możliwych tesselations jest bardzo duża. Ten problem należy do kategorii problemów NP-trudnych. Jednak dla naszej aplikacji nie potrzebujemy optymalnego rozwiązania, potrzebne jest dobre rozwiązanie , które można obliczyć w krótkim czasie.

Nie wspominasz o żadnej rekursji w pytaniu, więc Twoja sytuacja może być tylko jednym poziomem treemap; ale ponieważ algorytmy działają na jednym poziomie na raz, nie powinno to stanowić problemu.

+0

Przyjrzę się bliżej linkom, które podałeś, ale uważam, że nie jest to hierarchiczna mapa drzewa, chociaż masz rację, że powinna wyglądać jak jedna. Kilka razy zobaczyłem te mapy drzew (na przykład graficzną miarę tego, jak bardzo API zmieniło się z wersji na wersję lub reprezentację użycia dysku na folder/plik). Nie mam hierarchii w moich danych. Na przykład. Przypuśćmy, że chcę wykreślić handel 100 udziałami w rynku w ciągu ostatnich 24 godzin, gdy obszar jest proporcjonalny do wielkości transakcji (a zmiana ceny jest reprezentowana przez kolor). –

+0

Z Bruls et al .: "Po pierwsze, nie rozważamy podziału na wszystkie poziomy jednocześnie, co prowadzi do eksplozji czasu obliczeniowego, zamiast tego staramy się tworzyć kwadratowe prostokąty dla zestawu rodzeństwa, biorąc pod uwagę prostokąta, gdzie muszą się dopasować i stosować tę samą metodę rekursywnie. " Wygląda na to, że powinno ci się to udać. Przykład w sekcji 3.1 powinien już dawać dobre pojęcie o tym, jak to działa; pseudokod znajduje się w sekcji 3.2. – Thomas

1

Pracuję nad czymś podobnym. Priorytetem stawiam prostotę nad uzyskiwaniem podobnych współczynników proporcji, jak to tylko możliwe. To powinno (teoretycznie) działać. Przetestowano go na papierze dla niektórych wartości N między 1 a 10.

N = całkowita liczba rects tworzyć, Q = max (szerokość, wysokość)/min (szerokość, wysokość) R = N/P

Jeśli Q> N/2, podzielony rect w N części wzdłuż najdłuższego boku. Jeśli Q < = N/2, podziel prostokąt na części R (zaokrąglone int) wzdłuż jego najkrótszego boku. Następnie podziel podręki w części N/R (zaokrąglone w dół) wzdłuż najkrótszego boku. Odejmij zaokrągloną wartość w dół od wyniku następnego podziału pododcinków. Powtórz dla wszystkich poprawek lub dopóki nie zostanie utworzona wymagana liczba rectów.

Powiązane problemy