Повысить геометрию: пересечение с использованием открытого интервала - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть ломаная линия и отрезок.Одна из конечных точек отрезка линии всегда также является точкой полилинии.

Пример: отрезок линии: (1,2), (3,3) полилинии: (3,3), (10,10), (15,30)

Я хочу использовать геометрию буста, чтобы определить, есть ли пересечение отрезка и ломаной линии.Тем не менее, они могут пересекаться в соединенной точке.В этом случае (3,3).

boost::geometry::intersects всегда будет возвращать true в этом случае.Я хотел бы сделать исключение для общей точки, но все равно он возвращает true, если в любой другой точке есть пересечение.Есть ли умный способ пойти по этому поводу?Или я должен использовать boost::geometry::intersection и перебирать результаты?

1 Ответ

0 голосов
/ 22 ноября 2018

Если я вас правильно понял, вы хотите проверить, пересекается ли сегмент с полилинией в точке, отличной от ее соединенной точки.

Поэтому вам нужно проверять только сегменты, у которых нет общей конечной точки с красным сегментом (смотри картинку).Вы можете пропустить тех, у кого одинаковая конечная точка с красным сегментом, или вы можете обрабатывать их по-другому, например, проверить, совпадают ли целые сегменты.

Я не работал с c ++ в течение длительного временипоэтому я пишу псевдокод:

foreach (segment in polyline) {
    if (
        segment.A != redSegment.A &&
        segment.A != redSegment.B &&
        segment.B != redSegment.A &&
        segment.B != redSegment.B &&
        intersect (segment, redSegment)
    ) {
        return true;
    }
}
return false;

enter image description here

...