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:
- wszystkie punkty w A są zawarte w B
- 3 <= m <n
- B jest wielokątem w zestawie wszystkich Bs o najmniejszym obszarze
- B musi być prostym wielokątem (tzn. Bez skrzyżowań własnych).
- Dane wejściowe do algorytmu to wielokąt A i „m”.
- Dozwolona jest koincydencja segmentów w B z segmentami w A.
Niektóre przykładowe dane wejściowe i oczekiwane wyniki:
- Jeśli A jest kwadratem, a m wynosi 3, to B będzie trójkątem o najmniejszym polu powierzchni zawierającym A.
- 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.
ds.algorithms
cg.comp-geom
polygon
Thirlan
źródło
źródło
Odpowiedzi:
Nie wiem, jak wyglądają twoje wielokąty, ale być może wystarczy uproszczona wersja algorytmu Ramera – Douglasa – Peuckera :
Granica wielokąta (
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.
źródło
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):
Po naszej pracy nastąpił ogólny algorytm:
Możesz użyć Google Scholar do śledzenia późniejszych artykułów, które je cytują, w celu znalezienia ulepszeń i powiązanych prac.
źródło