先把線段延長成直線,求出公垂線跟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