7

두 개의 공선 선분 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

가 확인 세그먼트를 인 <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! SO에 오신 것을 환영합니다 !! –

+0

고맙습니다. 재미 있습니다. – Edoot

2

A<B, C<DA<=C (간단한 교환으로 수행 할 수 있음)을 확인하십시오. 그러면 :

  • B<C 경우 세그먼트
  • B=C 경우 해체하고, 그 교점이 단일 지점 B=C
  • 경우 B>C이며, 그 교점 [C, min(B, D)]
+2

Whqat A AlexWien