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:

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:
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:
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
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Krzysztof Zajączkowski | C/C++ | MS Visual Studio .net | .cpp | .cpp | ***** / 2 |
Poprawiony: 28 sierpnia 2012 19:56