|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Kluchnikov Eugene 2:5003/39.64 27 Oct 2001 21:36:50 To : Andrew Akapiev Subject : Perpendicular -------------------------------------------------------------------------------- AA> Hужно найти длину перпендикуляра, опущенного из точки C(x,y) AA> на прямую, проходящую через точки A(x1;y1) и B(x2,y2). __ _ Берем вектор AB(x2-x1;y2-y1), перпендикулярный вектор n(y1-y2;x2-x1) __ __ _ AC=a*AB+b*n Получаем систему линейных уравнений x-x1=a*(x2-x1)+b*(y1-y2) y-y1=a*(y2-y1)+b*(x2-x1) Если x2<>x1, то по первому уравнению выражаем a, иначе первое и второе меняем местами (одновременно x1-x2 и y2-y1 не обращаются в 0) a*(x2-x1)=(x-x1)-b*(y1-y2) Умножим второе на (x2-x1) (y-y1)*(x2-x1)=(y2-y1)*(x-x1)-b*(y1-y2)*(y2-y1)+b*(x2-x1)*(x2-x1) (y-y1)*(x2-x1)-(y2-y1)*(x-x1) b=----------------------------- (x2-x1)^2+(y2-y1)^2 Hеудивительно, что b не зависит от того, x2-x1=0 или нет ! _ Дальше всё просто длина l=|b*n| l=abs(b*sqrt((y1-y2)^2+(x1-x2)^2)) В итоге: (y-y1)*(x1-x2)-(x-x1)*(y1-y2) l=abs----------------------------- sqrt((y1-y2)^2+(x1-x2)^2)) Hадеюсь ничего не перепутал. _WBR_, _/*Eustas*/_. --- Eustas is a part of Me * Origin: My life for Aiur (2:5003/39.64) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/33763bdaf6a9.html, оценка из 5, голосов 10
|