Пиклиппер / Клиппер: пересечение полилиний с краем многоугольника - PullRequest
0 голосов
/ 24 ноября 2018

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

Пересечение полилиний с многоугольником прямоугольника (зеленый: клип, черный: предмет, Красный: решение)

image

Когда полилинии регулярно пересекают прямоугольник, решение обеспечивает, как предполагается, две пересекающиеся точки.Однако в случае, когда ломаная совпадает с ребром многоугольника, решение будет пустым.Есть ли способ получить решение по краям?

import numpy as np
import pyclipper

clip = np.asarray([(0, 0), (10, 0), (10, 10), (0, 10), (0, 0)])

pc = pyclipper.Pyclipper()
pc.AddPath(clip, pyclipper.PT_CLIP, True)

pathlist = []
for y in np.linspace(0, 10, 11):
    path = ((-1, y), (11, y))
    pathlist.append(path)

pc.AddPaths(pathlist, pyclipper.PT_SUBJECT, False)
solutions = pc.Execute2(pyclipper.CT_INTERSECTION, pyclipper.PFT_EVENODD, pyclipper.PFT_EVENODD)

for solution in solutions.Childs:
    contour = np.asarray(solution.Contour)
...