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)