Найти расстояние от данной точки до ближайшей стороны треугольника. - 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.

Объяснение кода листинга программы

  1. Объявление константы t с значением 0.001 для точности сравнения вычисленных вещественных чисел.
  2. Определение функции plosh для вычисления площади треугольника по его координатам.
  3. Определение функции prin для проверки, лежит ли заданная точка внутри треугольника.
  4. Определение функции vys для вычисления высоты треугольника из заданной точки.
  5. Объявление переменных ax, ay, bx, by, cx, cy, tx, ty и d как вещественных чисел.
  6. Запрос у пользователя координат вершин треугольника.
  7. Проверка на вырожденность треугольника и запрос нового ввода, если треугольник вырожденный.
  8. Запрос у пользователя координат точки внутри треугольника.
  9. Проверка, лежит ли введенная точка внутри треугольника и запрос нового ввода, если точка не лежит внутри треугольника.
  10. Вывод расстояния от точки до стороны AB.
  11. Вывод расстояния от точки до стороны AC.
  12. Вывод расстояния от точки до стороны BC.
  13. Определение наименьшего расстояния и его вывод.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы