EDYCJA: Zaktualizowałem program z odpowiedzią i działa świetnie!Wykryto, czy zbiór punktów w tablicy, które są wierzchołkami złożonego wielokąta, został zdefiniowany w kolejności zgodnej z ruchem wskazówek zegara lub w przeciwnym kierunku?
Robię program (możesz go wypróbować), który pozwala użytkownikom narysować wielokąty, które następnie trianguluje. Mogą kliknąć, aby dodać wierzchołki i nacisnąć Enter, aby dokonać triangulacji. W każdym razie algorytm działa dobrze tak długo, jak mówię, jeśli punkty zostały narysowane w sposób zgodny z ruchem wskazówek zegara lub przeciwny do ruchu wskazówek zegara (w tej chwili mam go ustawiony tylko do pracy z wielokątami zgodnymi z ruchem wskazówek zegara). Próbowałem to zrozumieć przez kilka dni, ale nie mam pojęcia, jak ustalić, czy punkty są zgodne z ruchem wskazówek zegara czy przeciwnie. Spróbuj rysować kształty za pomocą wspomnianego wcześniej programu, aby uzyskać lepszy pomysł, możesz doświadczyć tego, o czym mówię, lepiej, niż potrafię to wyjaśnić.
Oto jak punkty są zdefiniowane:
function Point(x, y) {
this.x = x;
this.y = y;
}
var vertices = [];
// Called on click
function addPoint(mouseX, mouseY) {
vertices.push(new Point(mouseX, mouseY));
}
Oto obraz wielokąta zegara:
Oto obraz przeciwnym wielokąta:
Jeśli mógłbyś mi pomóc dowiedzieć się, jak określić "punkt widzenia w prawo" punktów, byłbym bardzo wdzięczny!
Zmierz kąt pomiędzy co trzy punkty i sumę dla całego wielokąta. W jednym kierunku otrzymasz wynik pozytywny, aw innym otrzymasz sumę ujemną. Odpowiadający mądrości zegara Twojego Wielokąta. – TMB
Właśnie znalazłem to pytanie: http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-points-are-in-clockwise-order Przyjęta odpowiedź ma podobne rozwiązanie , ale prawdopodobnie prostsze niż moje. – kodkod