Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Орловский Дмитрий
Статус: Академик
Рейтинг: 4416
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2648
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2364
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1168
Дата выхода:04.04.2011, 01:00
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:179 / 180
Вопросов / ответов:1 / 1

Вопрос № 182668: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: как найти совпадение отрезков заданных координатами точек начала и конца в пространстве и опишите это математическими фотмулами...



Вопрос № 182668:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
как найти совпадение отрезков заданных координатами точек начала и конца в пространстве и опишите это математическими фотмулами

Отправлен: 30.03.2011, 00:30
Вопрос задал: Русинов Алексей Игоревич (1-й класс)
Всего ответов: 1
Страница вопроса »


Отвечает lamed (Профессор) :
Здравствуйте, Русинов Алексей Игоревич! 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.
Удачи!

Ответ отправил: lamed (Профессор)
Ответ отправлен: 30.03.2011, 07:53
Номер ответа: 266462
Россия, Ковров
Тел.: +79107793141

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 266462 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное