Найти расстояние от данной точки до ближайшей стороны треугольника. - Pascal
Формулировка задачи:
Даны координаты вершин треугольника и координаты некоторой
точки внутри него. Найти расстояние от данной точки до ближай-
шей стороны треугольника. При определении расстояний учесть,
что площадь треугольника может вычисляться разными способами
- через три его стороны или через основание и высоту.
Помогите(язык паскаль)
Решение задачи: «Найти расстояние от данной точки до ближайшей стороны треугольника.»
textual
Листинг программы
const t=0.001;{точность сравнения вычисленных вещественных чисел}
{функция определения площади треугольника по координатам вершин}
function plosh(x1,y1,x2,y2,x3,y3:real):real;
begin
plosh:=abs((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3))/2;
end;
{функция проверки лежит ли точка в треугольнике}
function prin(x1,y1,x2,y2,x3,y3,tx,ty:real):boolean;
begin
prin:=abs(plosh(x1,y1,x2,y2,x3,y3)-plosh(x1,y1,x2,y2,tx,ty)
-plosh(x1,y1,tx,ty,x3,y3)-plosh(tx,ty,x2,y2,x3,y3))<t
end;
{функция определения высоты}
function vys(x1,y1,x2,y2,tx,ty:real):real;
begin
vys:=2*plosh(x1,y1,x2,y2,tx,ty)/sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
var ax,ay,bx,by,cx,cy,tx,ty,d:real;
begin
repeat
writeln('Введите координаты вершин треугольника');
readln(ax,ay,bx,by,cx,cy);
if plosh(ax,ay,bx,by,cx,cy)<t then
writeln('Треугольник вырожденный, повторите ввод')
until plosh(ax,ay,bx,by,cx,cy)>t;
repeat
writeln('Введите координаты точки внутри треугольника:');
readln(tx,ty);
if not prin(ax,ay,bx,by,cx,cy,tx,ty) then
writeln('Точка вне треугольника, повторите ввод')
until prin(ax,ay,bx,by,cx,cy,tx,ty);
writeln('Расстояние от точки до стороны АВ=',vys(ax,ay,bx,by,tx,ty):0:2);
writeln('Расстояние от точки до стороны АC=',vys(ax,ay,cx,cy,tx,ty):0:2);
writeln('Расстояние от точки до стороны ВC=',vys(bx,by,cx,cy,tx,ty):0:2);
if vys(ax,ay,bx,by,tx,ty)<vys(ax,ay,cx,cy,tx,ty)then
d:=vys(ax,ay,bx,by,tx,ty)else d:=vys(ax,ay,cx,cy,tx,ty);
if vys(bx,by,cx,cy,tx,ty)<d then d:=vys(bx,by,cx,cy,tx,ty);
writeln('Наименьшее расстояние=',d:0:2);
end.
Объяснение кода листинга программы
- Объявление константы
tс значением0.001для точности сравнения вычисленных вещественных чисел. - Определение функции
ploshдля вычисления площади треугольника по его координатам. - Определение функции
prinдля проверки, лежит ли заданная точка внутри треугольника. - Определение функции
vysдля вычисления высоты треугольника из заданной точки. - Объявление переменных
ax,ay,bx,by,cx,cy,tx,tyиdкак вещественных чисел. - Запрос у пользователя координат вершин треугольника.
- Проверка на вырожденность треугольника и запрос нового ввода, если треугольник вырожденный.
- Запрос у пользователя координат точки внутри треугольника.
- Проверка, лежит ли введенная точка внутри треугольника и запрос нового ввода, если точка не лежит внутри треугольника.
- Вывод расстояния от точки до стороны AB.
- Вывод расстояния от точки до стороны AC.
- Вывод расстояния от точки до стороны BC.
- Определение наименьшего расстояния и его вывод.