1

2 つの 3D ライン セグメントが、各ラインの始点と終点に指定された XYZ 座標と交差するかどうかを判断するにはどうすればよいですか? 交差する場合、どの XYZ で交差しますか?

私は 2D 線についてのみ答えを見つけることができました: 2 つの線分が交差する場所をどのように検出しますか?

4

1 に答える 1

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 がゼロの場合 (または、数値エラーにより 1.0E-12 のような小さな Epsilon 値よりも小さい場合)、セグメントはこの点 P(tt) で交差します。

于 2016-01-05T05:12:23.423 に答える