7

Bei zwei kollinearen Liniensegmenten AB und CD: Wie finde ich heraus, ob sie sich überlappen? Wie finde ich die Start- und Endpunkte der Überlappung?Überlappung zwischen kollinearen Linien finden

Unten ist der Ansatz, den ich verwende. Ich sicherstellen, dass zuerst ein < B und 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 
    } 
} 

Nun ist es nicht eine einfachere Lösung, dies zu tun?

Update: Es gibt einen anderen Weg ... vergleichen Sie die Summe der Längen beider Segmente mit dem Abstand zwischen den äußersten Punkten. Wenn letzteres der kleinere ist, besteht Überlappung.

Antwort

13

A Sicherstellen < 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

Brilliant! Willkommen in SO !! –

+0

Danke. Es macht Spaß. – Edoot

2

Stellen Sie sicher, A<B, C<D und A<=C (die Sie durch einfaches Tauschen tun können). Dann gilt:

  • wenn B<C, die Segmente disjunkt sind
  • wenn B=C, dann wird der Schnittpunkt ist der Einpunkt B=C
  • wenn B>C, dann ist der Schnittpunkt das Segment [C, min(B, D)]
+2

Whqat meinst du mit A AlexWien