[Ctsc2010杀菌计划]
栋栋有一个凸多面体形状的漂亮盒子。盒子的每个面均由凸多边形状的透明玻璃薄壁组成。
每隔一段时间,栋栋都会使用激光发射器给盒子杀菌。激光发射器能够发射一束激光。当激光照射到盒子的玻璃薄壁时,会杀死薄壁内外两面的细菌,同时有大量光线透射过玻璃,少量光线被玻璃反射。
透射光线沿原方向继续传播。反射光线遵循镜面反射定律:反射光线、入射光线和镜面法线位于同一平面内;反射光线与入射光线分居法线两侧;反射角,即反射光线与法线的夹角,等于入射角,即入射光线与法线的夹角。
我们认为,激光经过 次反射后,能量已不足以杀死细菌。即使有多束这样的光线同时照射在玻璃薄壁上,也无法杀死细菌;而在第 次反射之前,激光照射到的细菌都会被杀死。
激光发射器的发射口是三角形。发射激光时,整个发射口都会发出激光。给定盒子与激光发射器的位置,请计算盒子的玻璃薄壁上有多大面积的细菌被杀死。由于盒子内外两面的细菌必然同时被杀死或同时不被杀死,因此只需计算盒子外表面上被杀死的细菌面积。
激光或经过反射的激光可能与某些表面平行,但数据保证它们不会照射到与其平行的表面。
输入格式
第一行包含三个整数 ,分别表示盒子的顶点数、盒子的面数和光线的反射次数。
接下来 行,第 行包含三个实数 ,表示盒子第 个顶点的坐标。
接下来 行,每行描述盒子的一个表面。第 行首先包含一个整数 ,表示该表面对应多边形的顶点数;随后包含 个整数,表示这些顶点在盒子顶点中的编号。编号按照顶点在该表面上的顺时针或逆时针顺序给出。
接下来三行,每行包含三个实数 ,表示激光发射器三角形发射口的一个顶点坐标。
最后一行包含三个实数 ,表示出射光线沿向量 的方向传播。
同一行中相邻的两个数之间以一个空格分隔。
输出格式
输出一个实数,表示被杀死的细菌的面积,四舍五入保留两位小数。
如果同一个表面区域被多次照射,其面积只计算一次。
样例输入
8 6 1
0.0 0.0 0.0
0.0 0.0 1.0
0.0 1.0 1.0
0.0 1.0 0.0
1.0 0.0 0.0
1.0 0.0 1.0
1.0 1.0 1.0
1.0 1.0 0.0
4 2 3 7 6
4 5 6 7 8
4 1 2 3 4
4 1 2 6 5
4 4 3 7 8
4 1 4 8 5
2.0 0.33 0.25
2.0 0.67 0.25
2.0 0.33 0.75
-1.0 0.0 0.0
样例输出
0.17
数据范围
- 原题未给出明确的数据范围。
来源与许可
本题为 CTSC 2010 试题「杀菌计划」,题面与测试数据整理自 BZOJ。
样例 1
输入
8 6 1
0.0 0.0 0.0
0.0 0.0 1.0
0.0 1.0 1.0
0.0 1.0 0.0
1.0 0.0 0.0
1.0 0.0 1.0
1.0 1.0 1.0
1.0 1.0 0.0
4 2 3 7 6
4 5 6 7 8
4 1 2 3 4
4 1 2 6 5
4 4 3 7 8
4 1 4 8 5
2.0 0.33 0.25
2.0 0.67 0.25
2.0 0.33 0.75
-1.0 0.0 0.0
输出
0.17