Elegancki test „Po lewej” dla polilinii

Dany:

Współrzędna (X, Y), która jest pozycją pojazdu.Tablica (X, Y), które są wierzchołkami w polilinii. Zauważ, że polilinia składa się tylko z prostych segmentów, bez łuków.

Czego chcę:

Aby obliczyć, czy pojazd znajduje się po lewej, czy po prawej stronie polilinii (lub na górze, oczywiście).

Moje podejście:

Iteruj po wszystkich segmentach linii i oblicz odległość do każdego segmentu. Następnie w najbliższym segmencie wykonasz prosty test po lewej stronie (jak wyjaśnionotutaj na przykład).

Możliwe problemy:

Gdy trzy punkty tworzą kąt mniejszy niż 90 stopni (jak pokazano na obrazie), powstaje bardziej skomplikowany scenariusz. Gdy pojazd znajduje się w czerwonym segmencie, jak pokazano poniżej, najbliższy segment może być jednym z dwóch. Jednakżepo lewej stronie test przyniesiedobrze jeśli pierwszy segment jest wybrany jako najbliższy segment, ilewo Inaczej. Możemy łatwo zobaczyć (przynajmniej mam nadzieję), że prawidłowym wynikiem powinien być pojazdlewo polilinii.

Moje pytanie:

Jak mogęelegancko, przeważnie jednakwydajnie zadbać o tę konkretną sytuację?

Moja poprawka jak dotąd:

Oblicz dla obu segmentów punkt na tym segmencie, zaczynając od punktu wierzchołka.Oblicz odległość od pojazdu do obu punktów, używając odległości euklidesowejZachowaj segment, dla którego obliczony punkt jest najbliższy.

Nie jestem bardzo zadowolony z tej poprawki, ponieważ czuję, że brakuje mi znacznie bardziej eleganckiego rozwiązania, moja poprawka wydaje się raczej „hakowa”. Wydajność jest jednak kluczowa, ponieważ jest używana w systemie osadzonym w czasie rzeczywistym.

Istniejący kod źródłowy jest w C ++, więc jeśli chcesz pisać w określonym języku, C ++ ma moje preferencje. Dzięki!

[edytować] Zmieniłemmoja poprawka, od punktu prostopadłego do punktu równoległego, ponieważ myślę, że łatwiej jest podążać za segmentem linii niż obliczyć normalną zewnętrzną.

questionAnswers(4)

yourAnswerToTheQuestion