我找到了算法來計算3D中兩條線之間的最短距離,並用Python重寫它。但是我也想增加它不僅可以返回距離,而且還可以返回位置最近的點。線上兩個最近點的位置
def line2line(-0.073455669 4.9843092 0.26107353 0.0 0.0 -1.0 -3.85838175 12.1999998 -4.50372314 0.405142069 -0.76723671 0.497199893):
epsilon = 0.00000001
L1P0 = np.array([xbeam,ybeam,zbeam]) #position of P0 on first line
L2P0= np.array([xout,yout,zout]) #position of P0 on first line
L1P1 = np.array([xbeam + ubeam ,ybeam + vbeam ,zbeam + wbeam]) #ubeam,vbeam and wbeam are direction cosines
L2P1 = np.array([xout + cx,yout + cy,zout + cz]) #cx,cy,cz are direction cosines
u = L1P1 - L1P0
v = L2P1 - L2P0
w = L1P0 - L2P0
a = np.dot(u,u)
b = np.dot(u,v)
c = np.dot(v,v)
d = np.dot(u,w)
e = np.dot(v,w)
D = a*c - b*b
if D < epsilon:
sc = 0.0
tc = d/b if b>c else e/c
else:
sc = (b*e - c*d)/D
tc = (a*e - b*d)/D
dP = w + (sc * u) - (tc * v)
return np.linalg.norm(dP)
它返回圍繞0.049這是正確的,但是當我試圖打印 W +(SC * U)或 (TC * V)我在想什麼是位置,它印了我:
0. , 0. , -19.82274615
3.8142822 , -7.22328672, 4.68097699
這不是我要找的這些點之一correct.Coordinates是:
-0.073455669 4.9843092 0.26107353
算法我發現here
歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在發佈您的MCVE代碼並準確描述問題之前,我們無法爲您提供有效的幫助。 我們應該能夠將發佈的代碼粘貼到文本文件中,並重現您描述的問題。 「我無法弄清楚」不是一個問題規範。你從這個算法得到什麼?你是如何在網上找到解決方案的?這是一個已知的問題。 – Prune
添加示例參數和結果是否會使其變爲MCVE?如果是這樣,我可以改變它,如果它使它更有用的StackOverflow社區。 即使這是已知的解決問題,我無法找到足夠的解決方案,使用internet.How excatly我supsu解釋我怎麼沒有找到什麼? – wiedzminYo
取樣參數,結果和* try *分析可以幫助你很多。另外,你可能會包含一個到你實現的算法的鏈接。 – Prune