Выяснить, верно ли, что первый треугольник целиком содержится во втором - Pascal ABC

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

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

Даны действительные числа x1,y1,x2,y2,...,x6,y6.Точки с координатами (x1,y1), (x2,y2), (x3,y3) рассматриваются как вершины первого треугольника, точки с координатами (x4,y4), (x5,y5), (x6,y6) - второго треугольника. Выяснить, верно ли, что первый треугольник целиком содержится во втором, и если да, определить площадь области, принадлежащей внутреннему (на рисунку область заштрихована). (Определить процедуру, позволяющую выяснить, лежат ли две точки в одной полуплоскости относительно заданной прямой, процедуру вычисления расстояния между двумя точками, а также процедуру вычичника по трем сторонам.)

Решение задачи: «Выяснить, верно ли, что первый треугольник целиком содержится во втором»

textual
Листинг программы
//лежат ли 2 точки по одну сторону от прямой
procedure odin(x1,y1,x2,y2,x3,y3,x4,y4:real;var f:boolean);
var a,b,c:real;
begin
//составим уравнение прямой
a:=y2-y1;
b:=x1-x2;
c:=x1*(y1-y2)+y1*(x2-x1);
//подставим координаты двух точек
//если знак одинаковый(произведние >0), по 1 сторону
f:=(a*x3+b*y3+c)*(a*x4+b*y4+c)>0
end;
//определение расстояния между точками
procedure rasst(x1,y1,x2,y2:real;var r:real);
begin
r:=sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
//определение площвди по Герону
procedure plsh(a,b,c:real;var s:real);
var p:real;
begin
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)*(p-b)*(p-c));
end;
//основная программма
var x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,a,b,c:real;
    f1,f2,f3:boolean;
    s,s1,s2:real;
begin
writeln('Введите координаты вершин первого треугольника');
readln(x1,y1,x2,y2,x3,y3);
writeln('Введите координаты вершин второго треугольника');
readln(x4,y4,x5,y5,x6,y6);
odin(x4,y4,x5,y5,x1,y1,x2,y2,f1);
odin(x5,y5,x6,y6,x2,y2,x3,y3,f2);
odin(x6,y6,x4,y4,x3,y3,x1,y1,f3);
if f1 and f2 and f3 then
 begin
  writeln('Первый треугольник полностью принадлежит второму');
  rasst(x1,y1,x2,y2,a);
  rasst(x2,y2,x3,y3,b);
  rasst(x3,y3,x1,y1,c);
  plsh(a,b,c,s1);
  rasst(x4,y4,x5,y5,a);
  rasst(x5,y5,x6,y6,b);
  rasst(x6,y6,x4,y4,c);
  plsh(a,b,c,s2);
  s:=s2-s1;
  write('Площадь между треугольниками=',s:0:2)
 end
else writeln('Первый треугольник не принадлежит второму');
end.

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

  1. В процедуре odin вычисляется уравнение прямой, используя координаты двух точек. Затем, подставляются координаты двух других точек и проверяется, является ли произведение равным нулю. Если это так, то точки лежат на одной стороне прямой, и треугольник целиком содержится во втором.
  2. В процедуре rasst вычисляется расстояние между двумя точками по формуле Евклида.
  3. В процедуре plsh используется формула Герона для вычисления площади треугольника. Здесь используются три параметра: a, b и c - длины сторон треугольника. Результатом является площадь треугольника.
  4. Основная программа запрашивает координаты вершин первого и второго треугольников, затем вызывает процедуры odin, rasst и plsh для проверки и вычисления площади между треугольниками. Если все три треугольника принадлежат друг другу, выводится сообщение об этом, а также площадь между треугольниками. В противном случае выводится сообщение о том, что первый треугольник не принадлежит второму.

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


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

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

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