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