#P16688. [Ctu2015]Visitors’ Train

[Ctu2015]Visitors’ Train

题目背景

鸟舍是一种供鸟类飞行和生活的大型笼舍。动物园中有一座主要鸟舍,以及若干较小、相对不重要的鸟舍。

动物园计划修建一段笔直的电动列车轨道。园长希望游客在乘车时能够尽可能多地拍到主要鸟舍,但其他鸟舍可能会挡住视线。

题目描述

给定列车轨道的起点和终点,以及所有鸟舍的位置。

所有鸟舍都是具有非零面积的矩形,可以任意旋转,不保证边与坐标轴平行。

对于轨道上的某个位置,若主要鸟舍的内部没有被任何其他鸟舍遮挡,即主要鸟舍完全可见,则称该位置是可见位置。

游客可以从列车中朝任意方向观看。

若其他鸟舍仅遮住主要鸟舍的边或顶点,而没有遮住其内部,则不认为主要鸟舍被遮挡。

请计算轨道上所有可见位置组成的线段总长度。

输入格式

输入包含多组测试数据。

每组测试数据的第一行包含一个整数 NN

1N100,1\le N\le100,

表示鸟舍数量。

第二行包含四个整数:

x1 y1 x2 y2

其中 (x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2) 分别是轨道的起点和终点。轨道视为无限细的线段。

接下来 NN 行,每行包含八个整数:

x1 y1 x2 y2 x3 y3 x4 y4

表示一个矩形鸟舍的四个顶点。顶点按照顺时针或逆时针顺序给出。

第一座鸟舍是主要鸟舍。

所有坐标均为整数,绝对值小于 1000010000

保证:

  • 任意鸟舍都不与轨道相交或接触;
  • 任意两座鸟舍都不相交或接触;
  • 每个矩形面积非零。

连续测试数据之间没有空行。

输入以单独一行整数 0 结束。

输出格式

对于每组测试数据,输出一行一个实数 LL,表示轨道上能够完整看到主要鸟舍的线段总长度。

输出与正确答案的绝对误差不得超过:

104.10^{-4}.

样例

输入

5
3 1 17 15
6 14 4 17 7 19 9 16
2 12 1 13 2 14 3 13
8 9 8 12 9 12 9 9
12 14 10 18 12 19 14 15
12 6 18 9 19 7 13 4
1
0 0 0 2
4 -1 4 1 5 1 5 -1
2
0 0 0 1
4 0 4 2 5 2 5 0
2 0 3 0 3 -1 2 -1
2
0 0 0 1
4 0 4 2 5 2 5 0
2 0 3 0 3 1 2 1
0

输出

7.07105
2.00
1.00
0.00