#P16688. [Ctu2015]Visitors’ Train
[Ctu2015]Visitors’ Train
题目背景
鸟舍是一种供鸟类飞行和生活的大型笼舍。动物园中有一座主要鸟舍,以及若干较小、相对不重要的鸟舍。
动物园计划修建一段笔直的电动列车轨道。园长希望游客在乘车时能够尽可能多地拍到主要鸟舍,但其他鸟舍可能会挡住视线。
题目描述
给定列车轨道的起点和终点,以及所有鸟舍的位置。
所有鸟舍都是具有非零面积的矩形,可以任意旋转,不保证边与坐标轴平行。
对于轨道上的某个位置,若主要鸟舍的内部没有被任何其他鸟舍遮挡,即主要鸟舍完全可见,则称该位置是可见位置。
游客可以从列车中朝任意方向观看。
若其他鸟舍仅遮住主要鸟舍的边或顶点,而没有遮住其内部,则不认为主要鸟舍被遮挡。
请计算轨道上所有可见位置组成的线段总长度。
输入格式
输入包含多组测试数据。
每组测试数据的第一行包含一个整数 :
表示鸟舍数量。
第二行包含四个整数:
x1 y1 x2 y2
其中 和 分别是轨道的起点和终点。轨道视为无限细的线段。
接下来 行,每行包含八个整数:
x1 y1 x2 y2 x3 y3 x4 y4
表示一个矩形鸟舍的四个顶点。顶点按照顺时针或逆时针顺序给出。
第一座鸟舍是主要鸟舍。
所有坐标均为整数,绝对值小于 。
保证:
- 任意鸟舍都不与轨道相交或接触;
- 任意两座鸟舍都不相交或接触;
- 每个矩形面积非零。
连续测试数据之间没有空行。
输入以单独一行整数 0 结束。
输出格式
对于每组测试数据,输出一行一个实数 ,表示轨道上能够完整看到主要鸟舍的线段总长度。
输出与正确答案的绝对误差不得超过:
样例
输入
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