2011-09-05 11 views
6

Na poniższym obrazie widać w (1) trójkąt i okrąg. Biorąc pod uwagę dedykowany punkt X w tym trójkącie, chcę usunąć wszystko, co nie jest widoczne od tego miejsca. Nie ma problemu z usunięciem tylko okręgu za pomocą prostego algorytmu różnicy wielokątów, jak w (2). Ale jakiego rodzaju algorytmu można użyć, aby uzyskać wielokąt jak w (3)?Wycinanie wielokątów: Tylko obszar "widoczny"

Wielokąt jest zawsze prosty.

Edytuj: Krąg jest tylko przykładem. Każdy prosty wielokąt powinien być możliwy.

Image #1

Można obraz moje potrzeby by przyjrzeniu obrazu gry "Commandos - Za linią wroga":

Image #2

+0

+1, Komandosi. Doskonała gra. –

+0

Jeśli nie otrzymasz odpowiedzi, możesz zaoferować nagrodę. –

+0

Twoje pytanie wydaje się bardzo podobne do http://stackoverflow.com/q/5892539/359538 –

Odpowiedz

3

Jest to podstawowa idea.

Zakładam, że problem jest nieco bardziej ogólny, ale będzie dużo łatwiej dostosować go do twojego problemu: biorąc pod uwagę plan zawierający wszystkie kształty, punkt i zestaw geometrycznych kształtów, chcemy usunąć z planu obszar niewidoczny z tego punktu.

To, co chcemy zrobić, to uzyskać, dla każdego kształtu, starting_polar i ending_polar punktów, czyli 2 punkty z minimalnym i maksymalnym kątem biegunowym należącym do kształtu.

Teraz usuniemy z plan kształt i usuniemy quadrilateral utworzoną przez punkty: starting_polar, ending_polar i przecięcia między 2 liniami prostymi (x, starting_polar) i (x, ending_polar) i granice plan.

W twoim przypadku plan będzie po prostu triangle.

+0

Obiecujący dźwięk Spróbuję. – tur1ng

+0

będzie działać na pewno dla wypukłych kształtów; ale myślę, że jeśli kształt jest wklęsły i można go podzielić na wypukłe podcięcia, to nadal będzie działać powtarzając go dla wszystkich kształtów kształtu – Simone

0

C równoległe do D, G równoległy do , B równolegle do F, D to średnica.

Polygon

+0

Przykro mi, ale zapomniałem wspomnieć, że krąg jest tylko przykładem. Każdy prosty wielokąt powinien być możliwy. – tur1ng

+0

Nie, w każdym razie odpowiedź Simone zapewnia lepsze rozwiązanie dla każdego przypadku :) – HRgiger

+0

Dla każdego przypadku, w którym kształt w wypukłym ...if jest wklęsły, nie zawsze działa idealnie ... ale podejrzewam, że jeśli możemy podzielić każdy wklęsły kształt w wypukłym kształcie problem jest rozwiązywany również w kształcie wklęsłym – Simone