Rzutowanie punktu na prostą

gringoM

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

0 komentarzy