• Предмет: Информатика
  • Автор: ayjemalakyyewa15
  • Вопрос задан 1 год назад

Dany tochki A,B,S,D s swoimy koordinatami (x1,y1),(x2,y2),(x3,y3),(x4,y4).Sostawit programmu na yazyke Paskal.Peresekayetsya li otrezki AB i SD

Ответы

Ответ дал: klazik4562185
0

Відповідь:

program intersects;

function intersects(x1, y1, x2, y2, x3, y3, x4, y4: real): boolean;

begin

 // Вычисляем коэффициенты и свободный член линейных уравнений

 // для отрезков AB и SD

 var a1, b1, c1, a2, b2, c2: real;

 a1 := y1 - y2;

 b1 := x2 - x1;

 c1 := x1 * y2 - x2 * y1;

 a2 := y3 - y4;

 b2 := x4 - x3;

 c2 := x3 * y4 - x4 * y3;

 var x, y: real;

 x := (c1 * b2 - c2 * b1) / (a1 * b2 - a2 * b1);

 y := (c1 * a2 - c2 * a1) / (b1 * a2 - b2 * a1);

var min_x1, max_x1, min_y1, max_y1: real;

 var min_x2, max_x2, min_y2, max_y2: real;

 if x1 < x2 then begin

   min_x1 := x1;

   max_x1 := x2;

 end else begin

   min_x1 := x2;

   max_x1 := x1;

 end;

 if y1 < y2 then begin

   min_y1 := y1;

   max_y1 := y2;

 end else begin

   min_y1 := y2;

   max_y1 := y1;

 end;

 if x3 < x4 then begin

   min_x2 := x3;

   max_x2 := x4;

 end else begin

   min_x2 := x4;

   max_x2 := x3;

 end;

 if y3 < y4 then begin

   min_y2 := y3;

   max_y2 := y4;

 end else begin

   min_y2 := y4;

   max_y2 := y3;

 end;

 

 intersects := (min_x1 <= x <= max_x1) and (min_y1 <= y <= max_y1) and

               (min_x2 <= x <= max_x2) and (min_y2 <= y <= max_y2);

end;

begin

 // Проверяем, пересекаются ли отрезки AB и SD

 writeln(intersects(0, 0, 2, 2, 2, 0, 0, 2)); // да

 writeln(intersects(0, 0, 2, 2, 2, 0, 3, 3)); // нет

 writeln(intersects(0, 0, 2, 2, 3, 3, 4, 4)); // нет

 writeln(intersects(0, 0, 2, 2, 1, 1, 3, 3)); // да

end.

Пояснення:

Вас заинтересует