Определить перекрывающиеся линии (удалить их)? - PullRequest
0 голосов
/ 06 ноября 2018

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

Вариант использования здесь, иногда, при генерации SVG, например, из другого источника данных, вы получаете «дубликаты» линий, то есть линий, которые буквально отслеживают один и тот же путь в изображении. Визуально это не проблема при рендеринге (кроме лишнего размаха в файле), но это проблема при использовании лазерного резака, который интерпретирует эти отрезки как траектории для резки лазером, и вы не хотите, чтобы он проходил по одному и тому же пути дважды.

Может кто-нибудь рассказать мне, как может выглядеть этот алгоритм? Мне трудно это визуализировать.

1 Ответ

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

Вы не сказали, что должно произойти, если вы обнаружите, что сегменты пути перекрываются только на части их протяженности. Вот что я мог сделать в графическом интерфейсе Inkscape. Может быть, это могло бы послужить шаблоном для выполнимого алгоритма:

  1. Преобразовать все графические примитивы в пути.

  2. Разобрать все пути, чтобы каждый отдельный сегмент был отдельным путем.

  3. Дайте всем этим путям ширину хода, которая в два раза превышает пороговое значение "перекрытия".

  4. Преобразование контуров штрихов в контуры.

  5. Для всех пар путей вырезать пересечение. (Осторожно: с Inkscape это разрушительный процесс, поэтому делайте копии.)

  6. Измерьте размер (viewBox) результирующих частей пересечения. Если его длина превышает порог «длины», можно сказать, что сегменты перекрываются.

Что касается пункта 1, я не могу назвать библиотеку, но так же, как и пункт 4, это то, что по существу делает каждый векторный рендер, так что это должно быть достижимо с существующими ресурсами. Точки 2 и 3 тривиальны. Для точки 5 существует существующих библиотек для определения точек пересечения. Точка 6 затем может быть просто решена путем определения наибольшего расстояния между точками пересечения на одной паре объектов пути.

...