Определить попадает ли точка внутрь треугольника - Turbo Pascal (33728)

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

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

Помогите пожалуйстаааа!!! Даны действительные числа x1, y1, x2, y2, x3, y3. Находится ли точка с координатами (x,y) внутри треугольника с вершинами (x1, y1), (x2, y2), (x3, y3)? Подсказка: соедините точку (x,y) с вершинами треугольника; рассмотрите площади четырех треугольников. Определите функции для вычисления длины отрезка и площади треугольника и используйте эти функции. Подсказка: соедините точку (x,y) с вершинами треугольника; рассмотрите площади четырех треугольников. Определите функции для вычисления длины отрезка и площади треугольника и используйте эти функции.
ну хоть маааааленькую идею((((

Решение задачи: «Определить попадает ли точка внутрь треугольника»

textual
Листинг программы
uses crt;
const t=0.001;
{определение длины стороны}
function Dlina(x1,y1,x2,y2:real):real;
begin
Dlina:=sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
{определение площади по Герону}
function Plosh(a,b,c:real):real;
var p:real;
begin
p:=(a+b+c)/2;
Plosh:=(sqrt(p*(p-a)*(p-b)*(p-c)));
end;
 
var x1,y1,x2,y2,x3,y3,x,y,a,b,c,xa,xb,xc,s,s1,s2,s3:real;
begin
clrscr;
repeat
writeln('Введите координаты X,Y вершин треугольника:');
writeln('1:  ');readln(x1,y1);
writeln('2:  ');readln(x2,y2);
writeln('3:  ');readln(x3,y3);
a:=Dlina(x1,y1,x2,y2);
b:=Dlina(x2,y2,x3,y3);
c:=Dlina(x1,y1,x3,y3);
{если площадь=0, не треугольник}
if  Plosh(a,b,c)<t then writeln('Это не треугольник! Повторите ввод.');
until Plosh(a,b,c)>=t;
writeln('Ведите координаты X,Y точки внутри треугольника:  ');
readln(x,y);
{вычислим длины сторон от точки до вершин треугольника}
xa:=Dlina(x1,y1,x,y);
xb:=Dlina(x2,y2,x,y);
xc:=Dlina(x3,y3,x,y);
{проверка внутри или нет}
s:=Plosh(a,b,c);{площадь данного треугольника}
s1:=Plosh(a,xa,xb);{1 маленький}
s2:=Plosh(b,xb,xc);{2}
s3:=Plosh(c,xc,xa);{3}
if abs((s1+s2+s3)-s)<t then writeln('Точка D лежит внутри треугольника!')
{если площади равны с заданной точностью}
else writeln('Точка D не лежит внутри треугольника!');{не равны}
readln
end.

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

  1. Подключается библиотека crt.
  2. Определяются константа t и функции Dlina и Plosh.
  3. Объявляются переменные x1, y1, x2, y2, x3, y3, x, y, a, b, c, xa, xb, xc, s, s1, s2, s3.
  4. Запускается цикл repeat-until. В каждой итерации пользователю предлагается ввести координаты X, Y вершин треугольника.
  5. После ввода координат вычисляются длины сторон a, b, c с помощью функции Dlina.
  6. Проверяется условие Plosh(a,b,c)<t. Если оно истинно, выводится сообщение Это не треугольник! Повторите ввод.
  7. Вычисляются площади s, s1, s2, s3 с помощью функции Plosh.
  8. Проверяется условие abs((s1+s2+s3)-s)<t. Если оно истинно, выводится сообщение Точка D лежит внутри треугольника!
  9. Если площади равны с заданной точностью, выводится сообщение Точка D не лежит внутри треугольника!
  10. Цикл повторяется до тех пор, пока Plosh(a,b,c)>=t.
  11. После окончания цикла выводится сообщение Ведите координаты X,Y точки внутри треугольника:.
  12. Пользователю предлагается ввести координаты X,Y точки.
  13. Вычисляются длины сторон xa, xb, xc с помощью функции Dlina.
  14. Проверяется условие abs((s1+s2+s3)-s)<t.
  15. Выводится сообщение Точка D лежит внутри треугольника! или Точка D не лежит внутри треугольника! в зависимости от результата проверки.

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

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