CGAL: расширить сегмент до границы многоугольника

Если у меня есть сегмент между 2 вершинами многоугольника, есть ли способ расширить этот сегмент, пока он не достигнет границы многоугольника, используя CGAL? (это может произойти, если хотя бы одна из вершин является рефлекторной вершиной).

1

Решение

Вы можете получить линию поддержки сегмента через mySegment.supporting_line() и проверьте, где эта линия пересекается с границей многоугольника. Затем вы можете создать новый сегмент, основанный на найденных точках пересечения.

Пусть p1 и p2 — вершины вашего сегмента. Если я правильно понял, вы бы хотели отсортировать точки пересечения по их координатам и создать сегмент, который идет от 1-й точки пересечения, меньшей, чем p1 и p2, до 1-й точки пересечения, большей, чем p1 и p2. (Обратите внимание, что несколько особых случаев должны быть обработаны здесь.)

Чтобы получить точки пересечения, вы можете перебрать сегменты вашего многоугольника и пересечь каждый из них с упомянутой вспомогательной линией через CGAL::intersection.

Более сложным подходом было бы создание Расположение содержащий ваш многоугольник, прикрепляя наблюдатель к этому и затем добавление упомянутой линии поддержки к Соглашению. Затем вы получите необходимую информацию из автоматических звонков на obs.before_split_face() а также obs.before_split_face(),

2

Другие решения

Других решений пока нет …