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

Блестящий! Добро пожаловать в SO !! –

+0

Спасибо. Это весело. – Edoot

2

Обеспечьте A<B, C<D и A<=C (что вы можете сделать с помощью простой замены). Тогда:

  • , если B<C, сегменты не пересекаются
  • , если B=C, то пересечение является единственной точкой B=C
  • , если B>C, то пересечение есть отрезок [C, min(B, D)]
+2

Whqat вы имеете в виду под A AlexWien