Programowanie w języku C/C++ » Artykuły

Rzutowanie punktu na prostą

  • 2008-11-11 13:48
  • 0 komentarzy
  • 2762 odsłony
  • Oceń ten tekst jako pierwszy
Rzutowanie prostopadłe punktu "p" na prostą zdefiniowaną dwoma punktami "p1" i "p2".

Dla uproszczenia założę, że istnieje taka klasa jak dPoint2D posiadająca pola x i y typu double.

Zagadnienie jest następujące: dany jest punkt "p" i linia "L" taka, że punkty "p1" oraz "p2" należą do tej linii, natomiast punkt "p" do niej nie należy. Założenie: p1 != p2. Zrzutowanie punktu "p" na linię "L" da punkt "pZ", który jest prostopadłym rzutem punktu "p" na tę linię.

Obliczyć należy współczynnik "u" w następujący sposób:

u=\frac{\({p.x-p_1.x)}\)\cdot\({p_2.x-p_1.x}\)+\({p.y-p_1.y}\)\cdot\({p_2.y-p_1.y}\)}{\({p_1.x-p_2.x}\)<sup>2+\({p_1.y-p_2.y}\)</sup>2}

powyższy wzór można zapisać z użyciem mnożenia skalarnego wektorów:

u=\frac{\({\vec{p}-\vec{p_1}}\)\circ\({\vec{p_2}-\vec{p_1}}\)}{\({\vec{p_1}-\vec{p_2}}\)\circ\({\vec{p_1}-\vec{p_2}}\)}

punkt pZ otrzymany zostanie w wyniku następującej operacji:

\vec{p_Z}=\vec{p_1}+\({\vec{p_2}-\vec{p_1}}\)\cdot u

Aby dowiedzieć się więcej o wektorach, oraz jak obsłużyć operatory dla przykładowej klasy wektora 2D zajrzyj do artykułów:

Operacje na wektorach
Implementacja wektorów

Aby dowiedzieć się więcej na temat tych wzorów i innych tego typu obliczeń geometrycznych zajrzyj na tą stronę:

http://local.wasp.uwa.edu.au/~pbourke/geometry/pointline/

Aby zobaczyć jak działa ten algorytm zajrzyj tutaj:

Rzutowanie punktu na prostą - program z kodem źródłowym