Консультация № 182668
30.03.2011, 00:30
52.69 руб.
0 8 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
как найти совпадение отрезков заданных координатами точек начала и конца в пространстве и опишите это математическими фотмулами

Обсуждение

давно
Профессионал
304622
583
30.03.2011, 04:29
общий
У вас затруднения с Паскалем или с математикой?
давно
Академик
320937
2216
30.03.2011, 07:53
общий
это ответ
Здравствуйте, Русинов Алексей Игоревич! Pascal-ABC.
Код:
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.
Удачи!

Неизвестный
30.03.2011, 09:01
общий
с математикой там нада через уравнение прямой решить чтоб программа нашла координаты линии совпадения например отрезоки(x1,x2,y1,y2,z1,z2) (1,8,1,8,1,8)и(2,9,2,9,2,9) должен вывести отрезок (2,8,2,8,2,8)
давно
Академик
320937
2216
30.03.2011, 09:24
общий
Доброе утро, Алексей Игоревич! Это уже другая задача. Вечером внесу изменения в ответ.
давно
Академик
320937
2216
30.03.2011, 18:28
общий
Добрый вечер! Это имелось в виду?
Код:
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.
Сильно не "гонял".
Неизвестный
30.03.2011, 18:37
общий
Адресаты:
можешь именно математику описать отдельно а то препод спрашивает матиматику всю а потом смотрит прогу
давно
Академик
320937
2216
30.03.2011, 18:54
общий
А математика здесь простая. Точка A лежит на отрезке BC эквивалентно тому, что BA+AC=BC. Просматриваем все 6 пар, до первого "попадания"
Неизвестный
30.03.2011, 18:55
общий
понятно спасибо
Форма ответа