Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program _3D;
- type
- Point = record
- x, y : Longint;
- end;
- var
- a, b, p, ab, ap: Point;
- dot : Longint;
- distAP, distAB, projAP, answer : Extended;
- begin
- ReadLn(p.x, p.y);
- Read(a.x, a.y);
- ReadLn(b.x, b.y);
- (* Считаем вектора AB и AP *)
- ab.x := b.x - a.x;
- ab.y := b.y - a.y;
- ap.x := p.x - a.x;
- ap.y := p.y - a.y;
- (* Скалярное произведение векторов AB * AP *)
- dot := ab.x * ap.x + ab.y * ap.y;
- (* Найдём расстояния от A до P и от A до B *)
- distAP := Sqrt(Sqr(a.x - p.x) + Sqr(a.y - p.y));
- distAB := Sqrt(Sqr(a.x - b.x) + Sqr(a.y - b.y));
- (* По формуле скалярного произведение dot = |AB| * |AP| * cos(a)
- * Найдём |AP| * cos(a), это будет проэкцией вектора AP (тенью) на прямую AB *)
- projAP := dot / distAB;
- (* Если всё это нарисовать, то можно увидить прямоугольный треугольник с
- * гипотенузой AP, одним катетом длиной projAP, а другой катет будет искомым
- * расстоянием от точки до прямой. Воспользуемся теоремой Пифагора. *)
- answer := Sqrt(Sqr(distAP) - Sqr(projAP));
- WriteLn(answer);
- end.
Advertisement
Add Comment
Please, Sign In to add comment