7

AB ve CD'nin iki ortak satır satırı verildiğinde, bunların çakışıp çakışmadığını nasıl bulabilirim? Çakışmanın başlangıç ​​ve bitiş noktalarını nasıl bulurum?Eşdoğrusal çizgiler arasında çakışma bulun

Kullanmakta olduğum yaklaşım aşağıdadır. Ben ilk A < B ve C < D. Şimdi

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 
    } 
} 

, daha basit bir çözüm bu orada yapmak değil sağlamakla ben?

Güncelleme: Başka bir yol var ... her iki parçanın uzunluklarının toplamını en dıştaki noktalar arasındaki mesafeyle karşılaştırın. Eğer ikincisi daha az ise, örtüşme var.

cevap

13

A sağlamak bölümdür < 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

Parlak! SO'ya hoş geldiniz! –

+0

Teşekkür ederim. Eğlenceli. – Edoot

2

A<B, C<D ve A<=C (basit bir şekilde değiştirerek yapabilirsiniz) sağlandığından emin olun. Ardından:

  • B<C ise, segmentler
  • B=C ise ayrık, o zaman kesişme tek nokta B=C
  • ise B>C, daha sonra kesişme [C, min(B, D)]
+2

Whqat A AlexWien

İlgili konular