我找到了算法来计算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