Если у меня есть сегмент между 2 вершинами многоугольника, есть ли способ расширить этот сегмент, пока он не достигнет границы многоугольника, используя CGAL? (это может произойти, если хотя бы одна из вершин является рефлекторной вершиной).
Вы можете получить линию поддержки сегмента через mySegment.supporting_line()
и проверьте, где эта линия пересекается с границей многоугольника. Затем вы можете создать новый сегмент, основанный на найденных точках пересечения.
Пусть p1 и p2 — вершины вашего сегмента. Если я правильно понял, вы бы хотели отсортировать точки пересечения по их координатам и создать сегмент, который идет от 1-й точки пересечения, меньшей, чем p1 и p2, до 1-й точки пересечения, большей, чем p1 и p2. (Обратите внимание, что несколько особых случаев должны быть обработаны здесь.)
Чтобы получить точки пересечения, вы можете перебрать сегменты вашего многоугольника и пересечь каждый из них с упомянутой вспомогательной линией через CGAL::intersection
.
Более сложным подходом было бы создание Расположение содержащий ваш многоугольник, прикрепляя наблюдатель к этому и затем добавление упомянутой линии поддержки к Соглашению. Затем вы получите необходимую информацию из автоматических звонков на obs.before_split_face()
а также obs.before_split_face()
,
Других решений пока нет …