如何确定属于space中两条不相交线之间距离的点

How to determine the points belonging to the distance between two not intersecting lines in space

我有一个问题想与您分享,希望您能帮助我。我正在研究 3D 线,我需要获得两条相交线的最小距离所在的确切点。为什么我需要这些积分?

对于无限直线中的每一条,我只想知道这个最小距离是否在同一条直线上的点之间的某个范围内。例如,我有直线 r 的点 P (0,0,0) 和 Q (10,10,10),我只想知道所述最小距离是否在该坐标区间内。

为了获得距离,我使用公式:

但是曾经说过我不知道如何确保在我上面评论的P和Q值范围内是否达到这样的最小距离。

如果有人对如何检查这个有更好的想法或知道如何获得这些积分,我将不胜感激。

如果我没看错你的问题:

P 得到两条直线上的正交投影(如果 vw 被归一化则不需要分母)

PAproj = A - P + dot(AP, v) / dot(v,v) * v
PBproj = B - P + dot(BP, w) / dot(w,w) * w

然后检查这些向量是否反共线

 cross(PAproj, PBproj) == 0   
   and 
 dot(PAproj, PBproj) has negative sign

通常,3D 中的线由线上一点的坐标和与线对齐(或平行)的一个矢量的坐标指定。所以我将假设您拥有的输入数据是:

1) line s with point S = [xS, yS, zS] on l and a vector u = [u1, u2, u3] aligned with s

2) line r defined by the pair of points P = [xP, yP, zP] and Q = [xQ, yQ, zQ] 

Your goal is to check whether the point on r that is closest to line s 
is inside the line segment PQ on r or not.

算法.

n = u x (Q - P)
SP = P - S
SQ = Q - S
proj_SP = SP - ( (n . SP) / (n . n) )  n 
proj_SQ = SQ - ( (n . SQ) / (n . n) )  n
w = n x u
if (proj_SP . w) * (proj_SQ . w) < 0
    then the point on r that is closest to line s 
         is inside the line segment PQ
else
         the point on r that is closest to line s 
         is outside the line segment PQ