Найти расстояние от данной точки до ближайшей стороны треугольника. - Pascal

Узнай цену своей работы

Формулировка задачи:

Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближай- шей стороны треугольника. При определении расстояний учесть, что площадь треугольника может вычисляться разными способами - через три его стороны или через основание и высоту. Помогите(язык паскаль)

Решение задачи: «Найти расстояние от данной точки до ближайшей стороны треугольника.»

textual
Листинг программы
  1. const t=0.001;{точность сравнения вычисленных вещественных чисел}
  2. {функция определения площади треугольника по координатам вершин}
  3. function plosh(x1,y1,x2,y2,x3,y3:real):real;
  4. begin
  5. plosh:=abs((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3))/2;
  6. end;
  7. {функция проверки лежит ли точка в треугольнике}
  8. function prin(x1,y1,x2,y2,x3,y3,tx,ty:real):boolean;
  9. begin
  10. prin:=abs(plosh(x1,y1,x2,y2,x3,y3)-plosh(x1,y1,x2,y2,tx,ty)
  11. -plosh(x1,y1,tx,ty,x3,y3)-plosh(tx,ty,x2,y2,x3,y3))<t
  12. end;
  13. {функция определения высоты}
  14. function vys(x1,y1,x2,y2,tx,ty:real):real;
  15. begin
  16. vys:=2*plosh(x1,y1,x2,y2,tx,ty)/sqrt(sqr(x1-x2)+sqr(y1-y2));
  17. end;
  18. var ax,ay,bx,by,cx,cy,tx,ty,d:real;
  19. begin
  20. repeat
  21. writeln('Введите координаты вершин треугольника');
  22. readln(ax,ay,bx,by,cx,cy);
  23. if plosh(ax,ay,bx,by,cx,cy)<t then
  24. writeln('Треугольник вырожденный, повторите ввод')
  25. until plosh(ax,ay,bx,by,cx,cy)>t;
  26. repeat
  27. writeln('Введите координаты точки внутри треугольника:');
  28. readln(tx,ty);
  29. if not prin(ax,ay,bx,by,cx,cy,tx,ty) then
  30. writeln('Точка вне треугольника, повторите ввод')
  31. until prin(ax,ay,bx,by,cx,cy,tx,ty);
  32. writeln('Расстояние от точки до стороны АВ=',vys(ax,ay,bx,by,tx,ty):0:2);
  33. writeln('Расстояние от точки до стороны АC=',vys(ax,ay,cx,cy,tx,ty):0:2);
  34. writeln('Расстояние от точки до стороны ВC=',vys(bx,by,cx,cy,tx,ty):0:2);
  35. if vys(ax,ay,bx,by,tx,ty)<vys(ax,ay,cx,cy,tx,ty)then
  36. d:=vys(ax,ay,bx,by,tx,ty)else d:=vys(ax,ay,cx,cy,tx,ty);
  37. if vys(bx,by,cx,cy,tx,ty)<d then d:=vys(bx,by,cx,cy,tx,ty);
  38. writeln('Наименьшее расстояние=',d:0:2);
  39. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы