Funkcja aproksymująca punkty GPS

0

Witam wszystkich bardzo serdecznie!
Z góry chciałbym zaznaczyć, że jestem tu nowy na forum, także za wszelkie wpadki z góry przepraszam.

Posiadam problem z którym nie mogę sobie za bardzo poradzić, przeszukałem już różne fora, aczkolwiek nie znalazłem żadnej konkretnej odpowiedzi.
Na początku chciałbym przybliżyć swój problem, mianowicie piszę program w języku C, który ze zbioru punktów (są to punkty odczytane z GPS) wyznaczających przebytą trasę, będzie informował mnie gdzie jest najbliższy punkt do którego należy podążać prosto, a kiedy należy skręcić . Punkty te na początku biegną prosto a następnie skręcają i chciałbym wiedzieć lub wyznaczyć taki punkt w którym to następuje. Podchodziłem do tego problemu na różne sposoby ale najbardziej logicznym pomysłem chyba, będzie wyznaczenie krzywej złożonej z prostych odcinków będącymi aproksymacją tych punktów (ponieważ jak wiemy odczyt z GPS, są to punkty porozrzucane na prawo i lewo). Być może istnieją już takie funkcje napisane w języku C które wyznaczają takie rzeczy, bądź ktoś już miał styczność z takim problemem. Gdyby ktoś wiedział jak podejść do tego problemu lub jak go rozwiązać to z góry dziękuję za każdą informację w tym temacie!

0

który ze zbioru punktów (są to punkty odczytane z GPS) wyznaczających przebytą trasę, będzie informował mnie gdzie jest najbliższy punkt do którego należy podążać prosto, a kiedy należy skręcić

Niezbyt jasno opisałeś na czym polega problem. Co to znaczy „najbliższy punkt do którego należy podążać prosto”? GPS nie wróży dokąd masz podążać, a tylko gdzie jesteś...
Kiedy należy skręcić?

Czy chodzi ci o algorytm wyszukiwania drogi do zadanego punktu na mapie czy o coś innego?

1

Wyznaczenie punktu załamania jest raczej dość proste. Masz 3 kolejne punkty A, B, C. Zbadaj kąt pomiędzy AB i AC i jeśli jest większy niż jakaś wartość progowa (kilka stopni) to znaczy ze w punkcie B należy zakręcić.

0

Tak, może faktycznie nie jasno sprecyzowałem pytanie. Chodzi o to że odczytuje z karty SD wcześniej nagraną trasę. Trasa ta składa się z punktów(współrzędnych geograficznych) w zapisie dziesiętnym. Gdybym odtworzył tą trasę na komputerze i wyrysował ją np w google maps to widziałbym że te punkty lecą prosto ale w pewnym momencie następuje zakręt i punkty te lecą już w inną stronę. Ja potrzebuje wyznaczyć tak jakby punkt załamania trasy, nie wiem czy dobrze to ujmuje bo później mam stworzoną funkcję która na podstawie bieżących współrzędnych określa mi dystans do tego punktu oraz podaje godzinę na którą muszę się kierować. Jeżeli aproksymowałbym tą trasę i miałbym wyznaczone pośrednie punkty to i tak bez sensu jest nawigować do każdego po kolei tylko interesuje mnie ile mam podążać prosto a kiedy nastąpi jakaś zmiana na trasie, tak działają mniej więcej nawigacje samochodowe podają np. 10 km prosto a dopiero po tym informują nas o ewentualnym zakręcie. Reasumując z całej trasy potrzebuje nawigować tak jakby po odcinkach prostych do kolejnych "załamań" lub zakrętów jak zwał tak zwał na trasie :)

1

Bierzesz sobie odcinek AB. Następnie sprawdzasz czy kolejny punkt C jest współliniowy z prostą na której leży twój odicnek (testujac kąt, tak jak pisałem wyżej). Jeśli jest to "wcielasz ten nowy punkt do odcinka i teraz masz odcinek AC. Jeśli kolejny punkt D nie jest współliniowy (bo kąt jest za duży) to znaczy że masz załamanie i twoim nowym odcinkiem referencyjnym jest CD.
Postępujesz tak i na koniec masz trasę złożoną z odcinków i zakrętów a dla każdego zakrętu znasz kąt o jaki trzeba się obrócić.

0

O to jest ciekawy pomysł, próbowałem podobnie ale trochę w złym kierunku poszedłem :) Spróbuję tego i zobaczę jak wyjdzie. Odpowiedź dam w poniedziałek :) Dzięki Shalom! :)

0

Rozwiązanie zaproponowane przez Shaloma dało pozytywny skutek, także zamykam temat ! ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1