На плоскости задан произвольный многоугольник без самопересечений (однако не обязательно выпуклый). Вершин у многоугольника до
и координаты всех вершин целые.
Задаётся прямоугольник простым перечислением вершин в том порядке, в котором они в нём связаны.
Рассмотрим бесконечную целочисленную сетку на плоскости, то есть сетку с узлами в точках с целыми координатами, линии которой идут по точкам, хотя бы одна из координат которых цела. Короче, обычную сетку из квадратиков с узлами в целых точках.
Требуется для заданного многоугольника найти суммарную длину линий сетки, которые лежат внутри этого многоугольника.
Я, кажется, основную идею просёк. Задача вполне тривиальна для прямоугольника и для прямоугольного треугольника (если включать в суммарную длину также длины сторон многоугольника, лежащих ровно на линии сетки - а это кажеться удобным делать, потом их всё равно можно вычесть за один проход). Воспользовавшись этим можно также посчитать ответ для выпуклого многоугольника (потому что это суть прямоугольник, из которого повычитали прямоугольники и прямоугольные треугольники).
Остаётся последний вопрос: как разложить произвольный многоугольник на сумму выпуклых? Интуитивно ясно, что такое разложение всегда существует, и на коленке даже можно набросать какие-то алгоритмы, но получается криво и громоздко. Прошу подсказки по поводу каких-то общих техник - наверняка случай возникновения этой задачи не единичен.