相交3D线

问题描述 投票:1回答:2

我如何确定两个3D线段是否与给定的XYZ坐标相交(针对每条线的起点和终点)?如果它们相交,则在什么XYZ?

我只能找到2D线的答案:How do you detect where two line segments intersect?

3d geometry line-intersection
2个回答
6
投票

让我们的起点是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)相交


0
投票

我知道这个年龄更大。但是,请问'u''t'的输入是什么?我正在将其转换为GML,但不知道这些值应该是什么。

© www.soinside.com 2019 - 2024. All rights reserved.