我发现算法是在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
这是不正确的。
-0.073455669 4.9843092 0.26107353
算法我在这里找到了
dP
是差异向量。但是您需要最接近的点的绝对坐标
i无法打开链接页面,但是sc
似乎是第一行参数方程的参数,而tc
是第二行的参数。在这种情况下
ClosestPointAtFirst = L1P0 + sc * u
ClosestPointAtSecond = L2P0 + tc * v
我想我有方法。
算法 die 找到与两条线的态度均匀的单位矢量。您也知道距离。这为您提供了连接两个关注点的线段的向量。
将该向量作为线性转换应用于u
。这为您提供了一条新的线u-prime
,它沿正常向量的方向移动了您计算的距离。u-prime
将在两个点之一中与v
相交。查找相交(这是最接近方法的v
上的点(,减去连接向量,这给出了您的另一点(在原始u
上(。
如果有助于可视化,而不是u-prime
和v
定义垂直于正常向量的平面。