Dobry wam. Na wykrycie punktu w wielokącie użyłem trzech sposobów (z czego dwa są moje):
-
Parzystość i nieparzystość krawędzi po przez przecięcie pewną długością odcinka.
-
Obwód wielokąta porównany z sumą dystansów od px, py do każdego wierzchołka wielokątu
-
Suma dystansów od pierwszego wierzchołka do reszty wierzchołków oraz porównanie jej do wartości sumy dystansów od px, py do każdego wierzchołka wielokątu.
-
Zrobiłem to za pomocą przesuwania pozycji (pętlowanie) od punktu px,py o 0.2f lub 0.5f (w dowolnym kierunku). Na koniec liczę ilość przebitych krawędzi. Istnieje jednak ryzyko, że 1/5 sprawdzeń wyjdzie błędnie np. punkt rzeczywiście znajduje się w środku, a program powie ci, że jest za nim. I tutaj nie wiem jak to lepiej rozwiązać. Proszę o pomoc...
2 i 3 sposób jest dość dobry, lecz przy krawędziach nie jest precyzyjny (o 1 lub 2 metra błednie wykrywa).
-
Po obliczeniu obwodu wielokąta, obliczam sumę dystansów od punktu px,py do każdego wierzchołka i jeżeli obwód jest większy od tej sumy to oznacza, że punkt znajduje się w wielokącie - minusem jest to, że nie jest precyzyjny.
-
Trzeciego już nie będę opisywał
Najbardziej zależy mi na tym, jak najprecyzyjniej obliczyć z pierwszej metody zamiast tego skanowania pozycji o jakąś tam wartość bo jak wiadomo czasem można ominąć krawędź co wiąże się z błędną liczbą przecięć. Jeżeli znacie jeszcze jakieś lepsze metody to wyjaśnijcie je tutaj. Dzięki :)