Wielokąt w ramach problemu generalizacji wielokąta

9

Chciałbym przeprosić wszystkie poniższe posty. Wybrałem niewłaściwe forum, aby pierwotnie to opublikować. Jednak zamiast uczynić to kompletnym marnotrawstwem, przerobiłem pytanie, aby było prawdziwym problemem „teoretycznej informatyki”.

Problem: Utwórz algorytm, który pobiera zestaw n uporządkowanych punktów na płaszczyźnie 2D, które tworzą kontur prostego wielokąta A, który może, ale nie musi, być wklęsły i tworzy nowy wielokąt B z m punktami, które:

  1. wszystkie punkty w A są zawarte w B
  2. 3 <= m <n
  3. B jest wielokątem w zestawie wszystkich Bs o najmniejszym obszarze
  4. B musi być prostym wielokątem (tzn. Bez skrzyżowań własnych).
  5. Dane wejściowe do algorytmu to wielokąt A i „m”.
  6. Dozwolona jest koincydencja segmentów w B z segmentami w A.

Niektóre przykładowe dane wejściowe i oczekiwane wyniki:

  1. Jeśli A jest kwadratem, a m wynosi 3, to B będzie trójkątem o najmniejszym polu powierzchni zawierającym A.
  2. Jeśli A jest sześciokątem, a m wynosi 4, to B będzie czworobokiem o najmniejszym polu powierzchni zawierającym A.

Powodzenia dla wszystkich, którzy próbują rozwiązać ten problem. Mogę obiecać, że będzie to bardzo trudne, szczególnie teraz, gdy rozwiązanie musi być optymalne.

Thirlan
źródło
1
@Joe: Nieprawda: jeśli A jest kwadratem, Thirian prosi o trójkąt o minimalnej powierzchni zawierający A. Z drugiej strony, jeśli A jest trójkątem (n=3)), wówczas rzeczywiście nie ma ważnego rozwiązania.
Jeffε
3
Chyba dodaj 17 do mojego pierwszego komentarza. Dlaczego 20?
Jeffε
3
Czy FFT nie jest niskim progiem dla „skomplikowanych”?
Sasho Nikolov
2
Nie sądzę, że to całkowicie prawda, że ​​problem wcale się nie zmienia, jeśli (powiedzmy) ustawiłeś m = 3. Problem polega na tym, że możesz wymagać wykładniczego czasu wm, i to dobrze, jeśli m jest ustalone na pewną liczbę, ale nie jest dobrze, jeśli m jest częścią wejścia.
Suresh Venkat,
5
„wszyscy wiedzą, na czym polega problem” nie jest prawdą. Pytamy, ponieważ nieokreślone wybory mają znaczenie.
Suresh Venkat,

Odpowiedzi:

10

Nie wiem, jak wyglądają twoje wielokąty, ale być może wystarczy uproszczona wersja algorytmu Ramera – Douglasa – Peuckera :

  • dla każdej wypukłej części obliczyć powierzchnięZAjot z trójkątów P.jaP.ja+1P.ja+2) utworzone przez trzy kolejne punkty;
  • dla każdej wklęsłej części obliczyć powierzchniębk z dwóch trójkątów P.jaP.jaP.ja+1 i P.ja+1P.ja+2)P.ja+2) utworzony przez przedłużenie dwóch punktów P.ja,P.ja+2) i środkowy punkt P.ja+1
  • Oblicz mjan{ZAjot,bk} i usuń odpowiedni punkt (i przesuń punkty, jeśli operacja jest wykonywana na części wklęsłej);
  • powtarzaj dopóki n-m punkty zostały usunięte.

wprowadź opis zdjęcia tutaj
Granica wielokąta (ZAjot zielone trójkąty, bkczerwone trójkąty). Po prawej granica po wyeliminowaniu dwóch punktów.

W przypadku bardziej złożonych algorytmów można wyszukiwać „ techniki generalizacji wieloboków ”, chociaż pierwszy warunek (punkty w A są zawarte w B) oznacza pewne dodatkowe operacje skalowania.

Marzio De Biasi
źródło
@Suresh: Jestem prawie pewien, że obecne 4 głosy poparcia dotyczą przejrzystości, a nie (prawie trywialnego) algorytmu :)
Marzio De Biasi
1
Ma to ten sam problem, co algorytmy Ramera-Douglasa-Peuckera: Wyjście nie jest gwarantowane jako prosty wielokąt!
Jeffε
1
@Jeffe: masz rację, ale (dalekie od optymalnego, jeśli wielokąt jest złożony) można uniknąć uproszczeń prowadzących do konfliktu . Na koniec, jeśli istnieją inne punkty, które należy usunąć, ale nie można uniknąć prostego wielokąta, użyj metody rozwiązywania konfliktów (na przykład oblicz punkty przecięcia i całkowicie odrzuć „dziury”). Chciałbym jednak zobaczyć prawdziwy przykład z PO.
Marzio De Biasi,
1
@MarzioDeBiasi To może działać. Ale może nie. Myślę, że każde opisane przez ciebie uproszczenie może spowodować samo-skrzyżowanie. A „wyrzucanie pętli” może pogorszyć sytuację, a nie poprawić. Jest to prawdopodobnie dobre rozwiązanie w praktyce, ale pamiętaj, gdzie jesteśmy!
Jeffε
Dzięki Marzio, teraz przynajmniej wiem, jak nazywają się teraz tego rodzaju problemy! Niestety rozwiązanie, które podałeś, jest tym, co (3) i (4) są w moich sugerowanych rozwiązaniach i (4) ma z tym problem. Elipsy, które są bardzo rozciągnięte, a zatem mają ostre końce o kątach około 30 stopni i mniejszych, z łatwością naruszą wymaganie (1).
Thirlan
6

Dawno temu napisałem artykuł, w którym wyszczególniono algorytm czasu liniowego do znajdowania najmniejszego trójkąta powierzchni zawierającego zestaw punktów (lub wielokąta):

J. O'Rourke, Alok Aggarwal, Sanjeev Maddila, Michael Baldwin, „Optymalny algorytm znajdowania minimalnych trójkątów otaczających”, J. Al Algorytmy , 1986, 7 : 258--269. Link .

Po naszej pracy nastąpił ogólny algorytm:

„Minimalna powierzchnia otaczająca wielokąty”, Alok Aggarwal, JS Chang i Chee K. Yap, The Visual Computer , Tom 1, Number 2 (1985), 112-117. Link .

Możesz użyć Google Scholar do śledzenia późniejszych artykułów, które je cytują, w celu znalezienia ulepszeń i powiązanych prac.

Joseph O'Rourke
źródło