Od czasu do czasu muszę tworzyć mapy, aby pokazać interesujące miejsca. Pierwszy krok do tworzenia stron przy użyciu zwykłej siatki:
Nie podoba mi się to rozwiązanie, ponieważ a) jest kilka stron z pojedynczymi punktami (np. Strona 25) siedzącymi na krawędzi ib) zbyt wielu stron.
Pierwszy problem można łatwo naprawić za pomocą kodu, - przenieś prostokąt zasięgu strony na środek zakresu odpowiednich punktów:
Nadal mi się to nie podoba, wygląda na bardzo zatłoczone, ponieważ liczba stron pozostaje taka sama. Pamiętaj, że wszystkie kończą się faktycznymi stronami A3 w wielu kopiach raportu!
Więc przygotowałem kod, który zmniejsza liczbę stron. W tym przykładzie od 45 do 34.
Nie jestem pewien, czy to najlepszy wynik, jaki można osiągnąć,
Jaka jest najlepsza strategia (pseudo kod, publikacja, biblioteka Python), aby przechodzić między punktami w celu zminimalizowania liczby prostokątów o danym rozmiarze w celu przechwycenia wszystkich punktów? Z pewnością ktoś odkrył to w teorii gier, sztuce wojskowej lub przemyśle rybnym
To jest aktualizacja pierwotnego pytania:
Pokazuje rzeczywisty zasięg i wymagany rozmiar strony:
Bliższe powiększenie pokazujące 10 ze 164 stron:
Rozmiar prostokąta może się zmienić, gdy tylko znajdzie się w granicach, tzn. Mniejszy jest w porządku.
Odpowiedzi:
To nie jest odpowiedź, myślałem, że opublikuję rozwiązanie Python dla tych, którzy są zainteresowani:
zastosował go ostatnio do planowania ankiet:
AKTUALIZACJA:
Wydaje się, że w przypadku niektórych wzorców zajmujących się „zbłąkanymi” punktami najpierw należy postępować. Użyłem skórki „wypukłego kadłuba”, aby je zidentyfikować, wyobrażenie o sobie, nie mogę znaleźć postu, przepraszam.
źródło
Wygląda to na geometryczną wersję problemu maksymalnego pokrycia, który jest ściśle związany z problemem ustawiania pokrycia , a te dwa są NP-Complete.
Aby to rozwiązać, można użyć przybliżenia. Wypróbowałbym następujący algorytm i wydaje się on działać idealnie. Chociaż ze względu na złożoność problemu nie możemy znaleźć najlepszej odpowiedzi.
implementacja tego algorytmu, tylko dla koła, jest tutaj: http://jsfiddle.net/nwvao72r/3/
źródło