[求助]求空间两线段之间的最短距离

如图,空间异面两线段,各线段两端点的坐标已知,求两线段之间的最短距离。
ps:如果能用C编程,我会再追加50分。
谢谢大家~~~
谢谢一楼的回答,
不过我求的是线段上的点之间的最短距离啊,不是空间两直线之间的距离。
如果公垂线的垂足正好在线段上的话,那么公垂线的长度就是线段之间的最短距离;
可是也有公垂线的垂足不在线段上的情况啊

------------原来是线段..------------
先把线段延长成直线,求出公垂线跟L1,L2的交点P1,P2.
如果线段1经过了P1,则取P1点;不经过则去离P1最近的点.
线段2同理,选取离P2最接近的点.
得到的Q1,Q2点为所求
要证明Q1Q2最短,可以任意选P属于线段2,比较Q1P和Q1Q2; 任意选P'属于线段1,比较P'Q2和Q1Q2. 从而说明P'P>=P'Q2>=Q1Q2

编程的话,再补充一个判断进去吧,判断P1,P2是否在线段1,2上

------------已补充!----------------

两线L1,L2。单位向量T1,T2
可以先在L2上作L1平行线,得到平面π。然后求L1到π的距离即可

具体计算
n//T1×T2=(t11,t12,t12)×(t21,t22,t23)
得到n=(A,B,C)
于是面π是Ax+By+Cz=D,D常数,通过L2上一个点即可确定D

任取L1上的点M=(xm,ym,zm)
M到π距离是(A*xm+B*ym+C*zm-D)/根号(A²+B²+C²)

不知道最后点面距离有没有记错……

----------编程-----------
(a1,a2,a3),(b1,b2,b3)是L1,L2上两点
方向是T1=(t11,t12,t13),T2=(t21,t22,t23)
t,s为参数,A+tT1,B+sT2分别表示L1,L2上一个动点
要求的是使得
|(a1+t*t11-b1-s*t21,a2+t*t12-b2-s*t22,a3+t*t13-b3-s*t23)|最小的t,s
即|(a1+t*t11-b1-s*t21,a2+t*t12-b2-s*t22,a3+t*t13-b3-s*t23)|²最小
即M(t,s)=∑(ai-bi+t*t1i-s*t2i)²达极小值,即M在所求点(t,s)上对t,s的偏导都为0
即2*∑[t1i*(ai-bi+t*t1i-s*t2i)]=0,2*∑[t2i*(ai-bi+t*t1i-s*t2i)]=0
解出t,s即可
然后直接把这个表达式交给C~

补充:
空间直线间最短距离就是在公垂线上取得的。换句话说,L1各点分别作一条到pi的垂线,一定有一条垂线以L2的点为垂足。解释如下:
记pi平面的法向量为n
对于L1上的点a,过a的垂线的垂足o(a)就是a沿n方向的投影。
把L1整条投影到pi上面,得到的L3与L1平行,与L2相交于b.
b点就是我们要找的点。
存在点c属于L1,使o(c)=b属于L2
温馨提示:答案为网友推荐,仅供参考
相似回答