Имея два коллинеарных отрезка AB и CD, как определить, перекрываются ли они? Как найти начальную и конечную точки перекрытия?
Ниже приведен подход, который я использую. Сначала я гарантирую, что A ‹ 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
}
}
Теперь, нет ли более простого решения для этого?
Обновление: есть еще один способ... сравнить сумму длин обоих сегментов с расстоянием между крайними точками. Если последнее меньше, существует перекрытие.