eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Пересечение невыпуклых многоугольников

Пересечение невыпуклых многоугольников

Большинство программ для рисования или иллюстраций имеют простые средства для создания многоугольников. Лучшие из них способны находить область пересечения двух многоугольников. На рисунке ниже изображены два многоугольника, один из которых является пятиугольником, а второй треугольником. Их область пересечения состоит из двух темных областей. \includegraphics{https://static.e-olymp.com/content/95/957a6352cf634c39328f0fa7e823db588154df07.jpg} IBM только что нанял Вас как члена группы программистов, которым следует создать очень сложную программу для рисования/иллюстраций. Ваша задача состоит в разработке программы, работающей с пересечениями многоугольников. Ваш босс попросил Вас отвлечься от пользовательского интерфейса и сосредоточиться на геометрическом представлении пересечений. Многоугольник в декартовой системе координат представляется последовательностью его вершин. Вершины в последовательности задаются в порядке их обхода границы многоугольника по часовой стрелке; таким образом любые две соседние вершины являются концами отрезка - стороны многоугольника. Последняя и первая точки последовательности также являются концами стороны многоугольника. Вершины задаются своими \textbf{x} и \textbf{y} координатами. Следующие утверждения справедливы для каждого многоугольника: \begin{itemize} \item Никакая точка не является вершиной (на одном многоугольнике) более одного раза. \item Две стороны могут пересекаться только в общей точке (вершине). \item Угол между любыми двумя сторонами с общей вершиной всегда больше \textbf{0} и меньше \textbf{360} градусов. \item Многоугольник содержит как минимум \textbf{3} вершины. \end{itemize} Пересечение двух многоугольников состоит из \textbf{0} или более связных областей. По заданным двум многоугольникам следует определить области их пересечения. \InputFile Входные данны состоят из нескольких тестов, каждый из которых содержит два многоугольника. Каждый многоугольник задается последовательностью чисел: \textbf{n}, \textbf{x_1}, \textbf{y_1}, \textbf{x_2}, \textbf{y_2}, ..., \textbf{x_n}, \textbf{y_n} где \textbf{n} - число вершин, а действительные числа с (\textbf{x_1}, \textbf{y_1}) до (\textbf{x_n}, \textbf{y_n}) представляют собой координаты граничных вершин. В конце входных данных задаются два нуля как значения \textbf{n}. Они являются меткой конца данных, и не должны трактоваться как отдельный тест. \OutputFile Для каждого теста вывести его номер (\textbf{Data set 1}, \textbf{Data set 2}, и так далее) и число областей в пересечении двух многоугольников. Пронумеруйте каждую область в тесте (\textbf{Region 1}, \textbf{Region 2}, и так далее) и выведите ее вершины в порядке обхода границы области по или против часовой стрелки. Первой следует вывести вершину с наименьшей \textbf{x} координатой (если таковых несколько, то с наименьшей \textbf{y} координатой). Ни одна из областей не должна включать в себя вырожденные участки (содержать соседние стороны угол между которыми равен \textbf{0}). Если три точки двух соседних сторон коллинеарны, то эти стороны следует объединить в одну. Каждую вершину следует выводить в формате (\textbf{x}, \textbf{y}), где \textbf{x} и \textbf{y} содержат по две десятичные цифры. Приведенный ниже пример содержит один тест (он соответствует картинке в условии задачи).
Лимит времени 2 секунды
Лимит использования памяти 256 MiB
Входные данные #1
3 2 1 0.5 3.5 8 5
5 1.5 3 2 7 6.5 6.5 6.5 3.25 4 4.5

0
0
Выходные данные #1
Data Set 1
Number of intersection regions: 2
Region 1:(1.500000000000000,3.000000000000000)(1.589743589743590,3.717948717948718)(3.250000000000000,4.050000000000000)
Region 2:(4.428571428571429,4.285714285714286)(6.500000000000000,4.700000000000000)(6.500000000000000,4.000000000000000)(5.857142857142857,3.571428571428572)