Выяснить, верно ли, что первый треугольник целиком содержится во втором - 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.
Объяснение кода листинга программы
- В процедуре
odin
вычисляется уравнение прямой, используя координаты двух точек. Затем, подставляются координаты двух других точек и проверяется, является ли произведение равным нулю. Если это так, то точки лежат на одной стороне прямой, и треугольник целиком содержится во втором. - В процедуре
rasst
вычисляется расстояние между двумя точками по формуле Евклида. - В процедуре
plsh
используется формула Герона для вычисления площади треугольника. Здесь используются три параметра: a, b и c - длины сторон треугольника. Результатом является площадь треугольника. - Основная программа запрашивает координаты вершин первого и второго треугольников, затем вызывает процедуры
odin
,rasst
иplsh
для проверки и вычисления площади между треугольниками. Если все три треугольника принадлежат друг другу, выводится сообщение об этом, а также площадь между треугольниками. В противном случае выводится сообщение о том, что первый треугольник не принадлежит второму.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д