Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

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

×