Как создать параллельную полилинию без самопересечений? - PullRequest
3 голосов
/ 08 августа 2010

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

Однако существует графическая проблема, когда я пытаюсь использовать этот алгоритм на изогнутой ломаной линии, то есть последовательности точек, которые образуют дугу. Когда я создаю параллель к полилинии дуги, все в порядке, пока я не увеличу расстояние, достаточное для того, чтобы проецируемые вершины через их нормали создавали ломаную линию, где продвижение от одной вершины к другой фактически перемещается в обратном направлении, создавая самопересечение.

Как эффективно удалить такие вершины из параллельной полилинии? Хотя я сравнил направление сегментов: если сгенерированные сегменты не параллельны, это означает, что я достиг точки, где параллельная полилиния пересекает себя. Однако это не очень хорошо работает для небольших сегментов (изогнутая полилиния будет генерировать еще меньшие сегменты) или полилиний, которые изначально имеют вырожденные вершины (одна вершина равна следующей).

1 Ответ

2 голосов
/ 09 августа 2010

Параллельная полилиния известна в графических кругах как смещенная полилиния.Похоже, что метод для генерации смещенных полилиний без вырожденных геометрических артефактов должен использовать Straight Skeleton алгоритмы.

Я также нашел интересную статью на эту тему под названием Алгоритм смещенияполилинии .

...