Skocz do zawartości
Zaloguj się, aby obserwować  
michals9

[JS] Przynależność punktu do wielokąta.

Polecane posty

Witam, mam następujący problem:

 

Przy użyciu klasy rysującej JsGraphics rysuję na ekranie wielokąt. Następnie jest losowo generowany punkt na osi współrzędnych, który również jest rysowany na ekranie.

Zarówno współrzędne wierzchołków figury jak i współrzędne wylosowanego punktu są przechowywane w tablicach.

Chciałbym aby po wciśnięciu przycisku wyświetlał się alert informujący czy ten punkt znajduje się wewnątrz figury.

 

Skorzystałem z algorytmu przynależności punktu do wielokąta, a właściwie z jego implementacji w Javie znajdującej się na: http://www.algorytm.org/index.php?option=c...id=72&Itemid=28.

Problem w tym, że w przypadku Javy algorytm działa prawidłowo. Jeśli zaś zastosuję go w moim skrypcie js, podaje on błędne dane.

 

Czy może to być spowodowane różnicą między standardowym układem współrzędnych a układem współrzędnych dokumentu w przeglądarce?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

debuguj js-a i jave jednoczesnie zobacz gdzie pojawia sie roznica bo na 99% wina jest po twojej stronie

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

albo najlepiej sam od początku do końca zakoduj ten algorytm...

 

 

I jeszcze bardzo przydatna wskazówka... Jak widzisz teraz masz mnóstwo przypadków, że w tej półprostej może zawierać się jakiś bok wielokąta.

Jeśli wielokąt ma współrzędne całkowite, to można wybrać sobie tą półprostą w bardzo sprytny sposób. Otóż musisz znaleźć wierzchołek, który leży najbardziej na prawo(ma największą współrzędną x)(to jest jedna pętelka). Niech ten wierzchołek leży w punkcie (x2,y2)

Jeśli twój losowy punkt do sprawdzenia ma współrzędne (x1,y1) to wystarczy, że dla każdego boku wielokąta sprawdzisz czy przecina on się z odcinkiem o początku w punkcie (x1,y1) a końcu w punkcie (x2+1,y1+1). Jeśli nieparzysta liczba boków przecina się z tym odcinkiem to punkt (x1,y1) leży w środku wielokąta.

 

Najlepiej narysuj to sobie na przykładzie (;

 

 

Jak sprawdzić czy dwa odcinki się przecinają, mam nadzieję że wiesz :)

 

Dzięki takiemu rozwiązaniu nie będziesz musiał martwić się o te głupie przypadki, gdzie łatwo popełnić błąd ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Algorytm zaczął działać prawidłowo w JS, gdy do końca tablic zawierających współrzędne wierzchołków figury dodałem współrzędne pierwszego wierzchołka.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

×