Skocz do zawartości

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


michals9

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?

Link do komentarza
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 ;)

Piszę proste programy i stronki internetowe na zlecenie, zaliczenie...

Delphi, Pascal, C++, (X)HTML, CSS, trochę PHP, Javascript i MySQL

Kontakt: gg:1477872 e-mail: lewymati@wp.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

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

×
×
  • Utwórz nowe...