Вычисление расстояния между двумя прямыми.

В пространстве даны четыре точки:
A(x1, y1, z1), B(x2, y2, z2), C(x3, y3, z3), D(x4, y4, z4).
Найти расстояние между прямыми AB и СD

Пусть выполняются четыре условия:
  1. точка M(x5, y5, z5) принадлежит прямой AB ;
  2. точка N(x6, y6, z6) принадлежит прямой CD ;
  3. прямая MN перпендикулярна прямой AB ;
  4. прямая MN перпендикулярна прямой СD ;
Тогда длина отрезка MN равна расстоянию между прямыми AB и СD
  1. Векторы AM=(x5-x1, y5-y1, z5-z1) и AB=(x2-x1, y2-y1, z2-z1)
    коллинеарны ;

  2. Векторы CN=(x6-x3, y6-y3, z6-z3) и CD=(x4-x3, y4-y3, z4-z3)
    коллинеарны ;

  3. Векторы MN=(x6-x5, y6-y5, z6-z5) и AB=(x2-x1, y2-y1, z2-z1)
    ортогональны, и их скалярное произведение равно нулю ;

  4. Векторы MN=(x6-x5, y6-y5, z6-z5) и CD=(x4-x3, y4-y3, z4-z3)
    ортогональны, и их скалярное произведение равно нулю ;
            



(x3-x1)*(x2-x1)+n*(x4-x3)*(x2-x1) - m*(x2-x1)*(x2-x1)+
(y3-y1)*(y2-y1)+n*(y4-y3)*(y2-y1) - m*(y2-y1)*(y2-y1)+
(z3-z1)*(z2-z1)+n*(z4-z3)*(z2-z1) - m*(z2-z1)*(z2-z1) = 0

(x3-x1)*(x4-x3)+n*(x4-x3)*(x4-x3) - m*(x2-x1)*(x4-x3)+
(y3-y1)*(y4-y3)+n*(y4-y3)*(y4-y3) - m*(y2-y1)*(y4-y3)+
(z3-z1)*(z4-z3)+n*(z4-z3)*(z4-z3) - m*(z2-z1)*(z4-z3) = 0

Введём обозначения:

P1=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)
P2=(x2-x1)*(x4-x3)+(y2-y1)*(y4-y3)+(z2-z1)*(z4-z3)
Q1=-((x4-x3)*(x2-x1)+(y4-y3)*(y2-y1)+(z4-z3)*(z2-z1))
Q2=-((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3)+(z4-z3)*(z4-z3))
R1=(x3-x1)*(x2-x1)+(y3-y1)*(y2-y1)+(z3-z1)*(z2-z1)
R2=(x3-x1)*(x4-x3)+(y3-y1)*(y4-y3)+(z3-z1)*(z4-z3)

P1*m+Q1*n=R1
P2*m+Q2*n=R2



m=(Q2*R1-Q1*R2)/(P1*Q2-P2*Q1)

n=(P1*R2-P2*R1)/(P1*Q2-P2*Q1)

Находим координаты точек M(x5, y5, z5) и N(x6, y6, z6)

x5=x1+m*(x2-x1)
y5=y1+m*(y2-y1)
z5=z1+m*(z2-z1)

x6=x3+n*(x4-x3)
y6=y3+n*(y4-y3)
z6=z3+n*(z4-z3)

Длина отрезка MN,
перпендикулярного прямой AB и перпендикулярного прямой CD,
равна расстоянию между прямыми AB и CD:



Программа, вычисляющая расстояние между двумя прямыми.

Как видите, задача эта очень простая. Именно такую задачу мне задал на экзамене по высшей математике Владимир Иванович Шевченко. Я решил эту задачу, получил отличную оценку, но почему-то я думал над такой простой задачей на экзамене очень долго, наверное, часов пять. Трудно сказать, чем могла быть вызвана моя столь низкая умственная работоспособность. Владимир Иванович очень хорошо знал высшую математику и прекрасно читал лекции. Только о форме одежды я с ним спорил. Я пытался убедить Владимира Ивановича, как верующего христианина, в том, что брюки для мужчин – это изобретение дьявола. Можно сказать, что в то время я был убеждён в том, что только шотландцы, которые носят килты без нижнего белья, войдут в Царство Небесное, а всех остальных мужчин, которые носят штаны, ожидает геенна огненная.