program p182668;
// Найти совпадение отрезков, заданных координатами точек начала и конца в пространстве
const
eps = 0.00001; { ошибка }
var
x11, y11, z11, x12, y12, z12,
x21, y21, z21, x22, y22, z22: real;
begin
write('Координаты концов первого отрезка ');
readln(x11, y11, z11, x12, y12, z12);
write('Координаты концов второго отрезка ');
readln(x21, y21, z21, x22, y22, z22);
if (abs(x11-x21)<=eps) and (abs(y11-y21)<=eps) and (abs(z11-z21)<=eps) and
(abs(x12-x22)<=eps) and (abs(y12-y22)<=eps) and (abs(z12-z22)<=eps) or
(abs(x12-x21)<=eps) and (abs(y12-y21)<=eps) and (abs(z12-z21)<=eps) and
(abs(x11-x22)<=eps) and (abs(y11-y22)<=eps) and (abs(z11-z22)<=eps) then
writeln('Отрезки совпадают')
else
writeln('Отрезки не совпадают');
end.
Пример работы
Координаты концов первого отрезка 1 1 1 2 2 2
Координаты концов второго отрезка 1 1 1 2 2 2
Отрезки совпадают
Координаты концов первого отрезка 1 1 1 2 2 2
Координаты концов второго отрезка 2 2 2 1 1 1
Отрезки совпадают
Координаты концов первого отрезка 1 1 1 2 2 2
Координаты концов второго отрезка 1 1 1 2 2 1.9999
Отрезки не совпадают
program p182668;
// Найти отрезок, являющийся общей частью отрезков, заданных координатами точек
// начала и конца в пространстве
const
eps = 0.00001; { предельная ошибка при сравнении вещественных чисел}
type
TPoint = record // точка в пространстве
x,y,z: real;
end;
var
a, b, c, d: TPoint;
p1, p2: TPoint;
error : boolean;
function dist(a,b:TPoint):real;
// расстояние между точками в пространстве
begin
dist := sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)+sqr(a.z-b.z));
end; { dist }
function eq(a,b: real): boolean;
// сравнение вещественных чисел
begin
eq:= (abs(a-b)<=eps);
end; { eq }
function include(a,b,x: TPoint): boolean;
// принадлежность точки X отрезку AB
begin
include := eq(dist(x,a)+dist(x,b),dist(a,b));
end; { on }
begin
error := false;
write('Координаты концов первого отрезка ');
readln(a.x, a.y, a.z, b.x, b.y, b.z);
write('Координаты концов второго отрезка ');
readln(c.x, c.y, c.z, d.x, d.y, d.z);
// Возможные комбинации (a, b), (a, c), (a, d), (b, c), (b, d), (c, d)
//
if include(c,d,a) and include(c,d,b) then
begin
p1:= a;
p2:= b;
end
else if include (c,d,a) and include (a,b,c) then
begin
p1:= a;
p2:= c;
end
else if include (c,d,a) and include (a,b,d) then
begin
p1:= a;
p2:= d;
end
else if include (c,d,b) and include (a,b,c) then
begin
p1:= b;
p2:= c;
end
else if include (c,d,b) and include (a,b,d) then
begin
p1:= b;
p2:= d;
end
else if include (a,b,c) and include (a,b,d) then
begin
p1:= c;
p2:= d;
end
else
error := true;
if error then
writeln('Ошибка в данных')
else
writeln('Общая часть ', p1.x, ' ', p1.y, ' ', p1.z, ' ', p2.x, ' ', p2.y, ' ', p2.z);
end.
program p182668;
// Найти отрезок, являющийся общей частью отрезков, заданных координатами точек
// начала и конца в пространстве
const
eps = 0.00001; { предельная ошибка при сравнении вещественных чисел}
type
TPoint = record // точка в пространстве
x,y,z: real;
end;
var
a, b, c, d: TPoint;
p1, p2: TPoint;
error : boolean;
function dist(a,b:TPoint):real;
// расстояние между точками в пространстве
begin
dist := sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)+sqr(a.z-b.z));
end; { dist }
function eq(a,b: real): boolean;
// сравнение вещественных чисел
begin
eq:= (abs(a-b)<=eps);
end; { eq }
function include(a,b,x: TPoint): boolean;
// принадлежность точки X отрезку AB
begin
include := eq(dist(x,a)+dist(x,b),dist(a,b));
end; { on }
begin
error := false;
write('Координаты концов первого отрезка ');
readln(a.x, a.y, a.z, b.x, b.y, b.z);
write('Координаты концов второго отрезка ');
readln(c.x, c.y, c.z, d.x, d.y, d.z);
// Возможные комбинации (a, b), (a, c), (a, d), (b, c), (b, d), (c, d)
//
if include(c,d,a) and include(c,d,b) then
begin
p1:= a;
p2:= b;
end
else if include (c,d,a) and include (a,b,c) then
begin
p1:= a;
p2:= c;
end
else if include (c,d,a) and include (a,b,d) then
begin
p1:= a;
p2:= d;
end
else if include (c,d,b) and include (a,b,c) then
begin
p1:= b;
p2:= c;
end
else if include (c,d,b) and include (a,b,d) then
begin
p1:= b;
p2:= d;
end
else if include (a,b,c) and include (a,b,d) then
begin
p1:= c;
p2:= d;
end
else
error := true;
if error then
writeln('Ошибка в данных')
else
writeln('Общая часть ', p1.x, ' ', p1.y, ' ', p1.z, ' ', p2.x, ' ', p2.y, ' ', p2.z);
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.