如何确定两条3D线段是否与每条线的起点和终点的XYZ坐标相交?如果他们相交,在什么XYZ?
我只能找到2D线的答案:你如何检测两个线段相交的位置?
我们的起点是P0,Q0,终点是P1,Q1.
Direction vectors DP = P1 - P0 DQ = Q1 - Q0 start difference vector PQ = Q0 - P0
以参数形式分段:
P = P0 + t * DP Q = Q0 + u * DQ
找到价值观
a = Dot(DP, DP) b = Dot(DP, DQ) c = Dot(DQ, DQ) d = Dot(DP, PQ) e = Dot(DQ, PQ)
找出判别力
DD = a * c- b * b
如果DD = 0,则段是平行的,并考虑(部分)重合的特殊情况,否则
查找线上最近点的参数
tt = (b * e - c * d) / DD uu = (a * e - b * d) / DD
如果任何参数超出范围0..1,则段不相交,否则
找到点之间的距离
P(tt) = P0 + tt * DP Q(uu) = Q0 + uu * DQ Dist = Length(Q(uu) - P(tt))
如果Dist为零(或由于数值误差而小于一些小的Epsilon值,如1.0E-12),那么段在此点P(tt)相交