Это возможно, но если многоугольник не является выпуклым, то его разбиение по линии потенциально может привести к более чем двум полигонам.
Обойти ребра полигонов и для каждого ребра определить, пересекает ли он линию.Найдите первое такое ребро, которое делает это.Продолжайте движение, пока не найдете другой такой край, но добавьте каждый, с которым вы столкнулись по пути, к новому многоугольнику (включая часть первого края, которая была разделена линией, которая находится на «этой стороне», и аналогично для последнего края).Наконец, добавьте закрывающий край к новому многоугольнику.Теперь продолжите обработку ребер - на другой стороне линии, создавая другой многоугольник таким же образом.Теперь у вас есть два полигона, разделенных по линии.Если вы будете осторожны, тот же метод будет работать с разбиением невыпуклого многоугольника на несколько многоугольников.
Остерегайтесь угловых случаев, таких как линия, пересекающая вершину многоугольника, и линия, не пересекающая многоугольниквообще.
Редактировать: Как указывает Ксан, это не будет правильно обрабатывать все невыпуклые случаи.Это можно исправить с помощью небольшой модификации алгоритма.Прежде чем добавить закрывающий край, как описано выше, вы должны сначала проверить, пересекает ли какой-либо дополнительный край исходного многоугольника этот закрывающий край;если это так, вы закрываете только до этого ребра и продолжаете обработку дальнейших ребер с этой точки.