Powiedzmy, że mamy postrzępiony kształt:
I dwa stworzenia poruszające się po obrysie.
Następnie całkowicie wygładzamy kształt, wyciągając rogi.
Otrzymujemy to:
Teraz widać, że Orange porusza się w kierunku CW, a zielony w kierunku przeciwnym. Jak mogę określić, w którym kierunku się poruszają, bez wygładzania kształtu?
Nowy wygląd
Odpowiedzi:
Narysuj linię do nieskończoności i policz, ile razy przekroczysz kształt (parzysty lub nieparzysty), nie licząc segmentu, w którym leży stworzenie. Następnie sprawdź, czy stwór idzie w lewo, czy w prawo od tej linii.
W tym przykładzie przecinamy kształt dwa razy (więc nawet) i idziemy w lewo. Wynik jest natychmiastowy z tej tabeli:
W pseudokodzie:
źródło
Zależy to od tego, jakie informacje masz dostępne ze struktury danych kształtu, ale stworzenie poruszające się CW wzdłuż konturu kształtu zawsze będzie miało wnętrze kształtu po prawej stronie, a stworzenie poruszające się w kierunku przeciwnym do ruchu będzie miało wnętrze kształtu na jego lewa strona.
źródło
źródło
Musisz wiedzieć, w którą stronę zdefiniowany jest wielokąt, w którą stronę otaczają go wierzchołki.
Jeśli nie wiesz o tym, możesz to rozwiązać, obliczając powierzchnię wielokąta:
Znak wyniku (dodatniego lub ujemnego) powie, czy jest to prawo lub w lewo. Musisz spróbować, aby sprawdzić, która z tych opcji jest dla Ciebie, ponieważ zależy to od układu współrzędnych.
Jeśli kształt jest zgodny z ruchem wskazówek zegara:
Jeśli kształt jest przeciwny do ruchu wskazówek zegara:
źródło
Wygląda na to, że Trevor już omówił to pytanie, ale oto moje rozwiązanie:
obliczyć obszar, który pokrywa twój kształt, co oznacza
używając obszaru obliczonego jak wyżej, możesz łatwo stwierdzić, czy sam kształt jest zgodny z ruchem wskazówek zegara, czy nie. jest zgodny z ruchem wskazówek zegara tylko wtedy, gdy obszar jest poniżej zera.
sprawdź, czy obiekty poruszają się w taki sam sposób, jak wierzchołki są uporządkowane, czy w przeciwnym kierunku.
źródło