Ребят помогите написать функцию.

Форум для обсуждения вопросов математики

Модератор: Admin

vlzkonopatov
Сообщения: 1
Зарегистрирован: Пт май 23, 2014 11:21 pm

Ребят помогите написать функцию.

Сообщение vlzkonopatov » Пт май 23, 2014 11:24 pm

Одним словом задание дали следующее
Написать функцию
lineDist([[x11, y11, z11], [x12, y12, z12]], [[x21, y21, z21], [x22, y22, z22]]),
возвращающую расстояние между двумя прямыми, которые заданы парами точек.

Пример:
lineDist([[0, 0, 0], [1, 1, 0]], [[0, 1, 1], [1, 0, 1]]);
1


И я не как не могу понять с чего начать.

Kitonum
Сообщения: 2084
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Ребят помогите написать функцию.

Сообщение Kitonum » Вс май 25, 2014 7:43 am

vlzkonopatov писал(а):Одним словом задание дали следующее
Написать функцию
lineDist([[x11, y11, z11], [x12, y12, z12]], [[x21, y21, z21], [x22, y22, z22]]),
возвращающую расстояние между двумя прямыми, которые заданы парами точек.

Пример:
lineDist([[0, 0, 0], [1, 1, 0]], [[0, 1, 1], [1, 0, 1]]);
1


И я не как не могу понять с чего начать.

Два подхода:

1) Если Вам нужна Ваша функция в явном виде, то формула для расстояния между прямыми известна. См.
http://ru.wikipedia.org/wiki/%D0%A1%D0% ... 1%8B%D0%B5

2) Если Вам важен именно результат, то проще всего воспользоваться каким-нибудь матпакетом. В Maple задачу решает команда geom3d[distance]

Код процедуры:

lineDist:=proc(L1::listlist,L2::listlist)
uses geom3d;
line(l1,[point(P1,L1[1]),point(P2,L1[2])]);
line(l2,[point(P3,L2[1]),point(P4,L2[2])]);
distance(l1,l2);
end proc:


Пример (расстояние между непересекающимися диагоналями двух боковых граней единичного куба):

lineDist([[0, 0, 0], [1, 0, 1]], [[1, 0, 0], [1, 1, 1]]);
sqrt(3)/3