algorytm.org

Rzutowanie punktu prostopadle na linię

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Rzutowanie punktu prostopadle na linię
Ocena użytkowników:***** / 7
SłabyŚwietny 
Wpisany przez Krzysztof Zajączkowski, 05 stycznia 2009 20:29

Niech istnieją dwa wektory określające linię rzutowania V1 i V2 oraz rzutowany punkt V3. Konieczne jest następujące założenie: V1 różne od V2. Istnieje możliwość obliczenia wektora V4 będącego prostopadłym rzutem wektora V3 na prostą określoną wektorami V1 i V2 poprzez obliczenia współczynnika u w następujący sposób:
u = \frac{(V_3.x-V_1.x)*(V_2.x-V_1.x)+(V_3.y-V_1.y)*(V_2.y-V_1.y)}{(V_1.x-V_2.x)^2+(V_1.y-V_2.y)^2}
powyższy zapis jest rozszerzeniem wzoru wykorzystującego iloczyn skalarny:
u = \frac{\left(\vec{V_3}-\vec{V_1}\right)\circ\left(\vec{V_2}-\vec{V_1}\right)}{\left(\vec{V_1}-\vec{V_2}\right)\circ\left(\vec{V_1}-\vec{V_2}\right)}
Współczynnik u jest stosunkiem długości wektora otrzymanego z różnicy wektorów V4 - V1 do długości wektora otrzymanego z różnicy wektorów V2 - V1. Przedstawiono to na rysunku poniżej:

Rzutowanie punktu prostopadle na linię


Znając więc wartość współczynnika u można obliczyć w współrzędne wektora V4 korzystając z operacji skalowania wektora V2 - V1 przez wyliczony współczynnik u:
V_4 = V_1 + (V_2 - V_1) * u
gdzie:
(V_1 - V_2) * u = V_1 - V_4
Zastosowanie prostopadłego rzutowania na linię znajdziemy chociażby w nawigacji GPS. Punkt obliczony na podstawie danych z satelit przeważnie nie znajduje się dokładnie na drodze wykreślonej na mapie. Częściowo wynika to z niedokładności systemu GPS, częściowo z niedokładności map. W takim przypadku musimy nasz punkt "przenieść" wirtualnie na najbliższą drogę. Żeby punkt ten był jak najbliżej miejsca wskazywanego przez system GPS, należy zrzutować go prostopadle na drogę.

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Krzysztof ZajączkowskiC/C++MS Visual Studio .net
.cpp
.cpp
***** / 2
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 28 sierpnia 2012 19:56
Komentarze
photo
0 # WladekProgramista 2009-08-15 22:14
dzięki,to mi było bardzo potrzebne
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz