7

2つの共線の線分ABとCDがあると、それらが重なるかどうかをどのようにして見つけますか?オーバーラップの開始点と終了点を見つけるにはどうすればよいですか?共線の重なりを見つける

以下は、私が使用しているアプローチです。私が最初に < BとC < D.

その
if(pa < pc){ 
    if(pc < pb){ 
    if(pd < pb){ 
     // overlap exists; CD falls entirely within AB 
    } 
    else { 
     // overlap exists; CB is the overlapping segment 
    } 
    } 
    else { 
    // no overlap exists; AB lies before CD 
    } 
} 
else { 
    if(pa < pd){ 
    if(pb < pd){ 
     // overlap exists; AB lies entirely within CD 
    } 
    else { 
     // overlap exists; AD is the overlapping segment 
    } 
    } 
    else { 
    // no overlap exists; CD lies before AB 
    } 
} 

を確保していますさて、これを行うための簡単な解決策はありませんでしょうか?

更新:別の方法があります...両方のセグメントの長さの合計を最外点間の距離と比較します。後者がより小さい場合、重なりが存在する。

答えて

13

Aを確認しています<B、C <D:

if (pb - pc >= 0 and pd - pa >=0) { // overlap 
    OverlapInterval = [ max(pa, pc), min(pb, pd) ] // it could be a point [x, x] 
} // else: not overlap 
+0

華麗!ようこそ! –

+0

ありがとうございます。それは楽しいです。 – Edoot

2

A<BC<DA<=C(これは簡単に交換できます)を確認してください。その後:B=C場合

  • B<Cであれば、セグメントは
  • 互いに素であるB>C場合、交点は、単一点B=C
  • あり、その後交差点セグメント[C, min(B, D)]
+2

Whqat A AlexWien

関連する問題