Param67. Используя типы TPoint, TTriangle и функции Leng и Area (см. задания Param64-Param66), описать функцию Dist($$P$$, $$A$$, $$B$$) вещественного типа ($$P$$, $$A$$, $$B$$ — параметры типа TPoint), находящую расстояние $$D(P, AB)$$ от точки $$P$$ до прямой $$AB$$ по формуле $$D(P, AB)=2*S_{PAB}/|AB|$$, где $$S_PAB$$ — площадь треугольника $$PAB$$. С помощью этой функции найти расстояния от точки $$P$$ до прямых $$AB$$, $$AC$$, $$BC$$, если даны координаты точек $$P$$, $$A$$, $$B$$, $$C$$.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
program Param67; type TPoint = record x,y:real; end; TTriangle = record A,B,C:TPoint; end; var P,A,B,C:TPoint; Function Leng(A,B:TPoint):real; begin Leng:=sqrt(sqr(A.X-B.X)+sqr(A.Y-B.Y)); end; Function Perim(T:TTriangle):real; begin Perim:=Leng(T.A,T.B)+Leng(T.B,T.C)+Leng(T.C,T.A); end; Function Area(T:TTriangle):real; begin Area:=sqrt((Perim(T)/2)*((Perim(T)/2)-Leng(T.A,T.B))*((Perim(T)/2)-Leng(T.A,T.C))*((Perim(T)/2)-Leng(T.B,T.C))); end; Function Dist(P,A,B:TPoint):real; var PAB:TTriangle; begin PAB.A:=P; PAB.B:=A; PAB.C:=B; Dist:=2*Area(PAB)/Leng(A,B); end; begin Write('P(x,y): '); Readln(P.x,P.y); Write('A(x,y): '); Readln(A.x,A.y); Write('B(x,y): '); Readln(B.x,B.y); Write('C(x,y): '); Readln(C.x,C.y); Writeln(Dist(P,A,B)); Writeln(Dist(P,A,C)); Writeln(Dist(P,B,C)); end. |
Другие задачи из раздела Param можно посмотреть здесь.
Комментарии: