Алгоритмы упрощения 2D-полигонов путем свертывания сегментов?

#algorithm #geometry #2d #polygon #simplify

#алгоритм #геометрия #2d #полигон #упростить

Вопрос:

Недавно я изучил несколько различных методов упрощения полигонов.

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

Я изучал возможность использования упрощенного метода свертывания сегментов, общего для 3D-геометрии, см.: Упрощение поверхности с использованием метрик квадрических ошибок.

Из некоторых быстрых тестов это работает достаточно хорошо, однако я подозреваю, что это не все, что ново, возможно, есть и лучшие методы для 2D-полигонов.

Я также изучил метод упрощения полигонов PO-Trace, который является превосходным, но сосредоточен на упрощении полигонов, извлеченных из растровых изображений.


Существуют ли хорошо известные алгоритмы упрощения полигонов с использованием свертывания сегмента?

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

Если нет, я свяжу код, как только он будет готов.

Комментарии:

1. В MeshLib можно найти реализацию упрощения метрики квадрической ошибки для полилиний , см. MRPolylineDecimate.h/.cpp

Ответ №1:

Библиотека CGAL предоставляет реализацию алгоритма упрощения полилиний.

Он основан на работе Дайкена и др.