2 つの 3D ライン セグメントが、各ラインの始点と終点に指定された XYZ 座標と交差するかどうかを判断するにはどうすればよいですか? 交差する場合、どの XYZ で交差しますか?
私は 2D 線についてのみ答えを見つけることができました: 2 つの線分が交差する場所をどのように検出しますか?
2 つの 3D ライン セグメントが、各ラインの始点と終点に指定された XYZ 座標と交差するかどうかを判断するにはどうすればよいですか? 交差する場合、どの XYZ で交差しますか?
私は 2D 線についてのみ答えを見つけることができました: 2 つの線分が交差する場所をどのように検出しますか?
始点を 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 がゼロの場合 (または、数値エラーにより 1.0E-12 のような小さな Epsilon 値よりも小さい場合)、セグメントはこの点 P(tt) で交差します。