线上两个最接近点的位置



我发现算法是在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-primev定义垂直于正常向量的平面。

最新更新