说明
考虑三维笛卡尔坐标系中的两个不透明平面 z=z1 和 z=z2(z1<z2)。每个平面上都有一个凸多边形孔洞,分别记为 P1 和 P2,允许光线通过。
有一个点光源 L 在平面 z=z0(z2<z0)上沿平行于 xOy 平面的方向移动。光源在时刻 t=0 从初始位置 (x0,y0,z0) 出发,以恒定速度 v=(vx,vy,0) 运动。因此,在任意时刻 t,光源的位置为 (x0+vxt,y0+vyt,z0)。
对于平面 z=0 上的一个点 A,定义它在时刻 t 被照亮,当且仅当线段 LA 与两个多边形 P1 和 P2 的内部(包括边界)均相交。时刻 t 的照亮面积,记为 f(t),是平面 z=0 上所有被照亮点形成的面积。
定义在时间段 [t1,t2] 上的平均照亮面积,记为 E[f(t)∣t∼U(t1,t2)],为 f(t) 在区间 [t1,t2] 上的期望值,其中 t 假设为 [t1,t2] 上均匀分布的随机变量。
给定多个时间段 [t1,t2],你的任务是找出每个时间段内的平均照亮面积。
输入格式
- 第一行包含一个整数 T(1≤T≤104),表示测试用例的数量。
- 对于每个测试用例:
- 第一行包含五个整数 x0、y0、z0、vx、vy(−105≤x0,y0≤105,1≤z0≤105,−103≤vx,vy≤103),分别表示光源的初始位置 (x0,y0,z0) 及其速度向量 v=(vx,vy,0)。保证 v=(0,0,0)。
- 第二行包含两个整数 n1 和 z1(3≤n1≤105,1≤z1≤105),分别表示多边形 P1 的顶点数和 z1 的值。接下来的 n1 行每行包含两个整数 xi 和 yi(−105≤xi,yi≤105),按逆时针顺序描述 P1 的顶点。
- 接下来一行包含两个整数 n2 和 z2(3≤n2≤105,1≤z2≤105),分别表示多边形 P2 的顶点数和 z2 的值。接下来的 n2 行每行包含两个整数 xj 和 yj(−105≤xj,yj≤105),按逆时针顺序描述多边形 P2 的顶点。
- 保证 P1 和 P2 均无三点或更多点共线。
- 接下来一行包含一个整数 q(1≤q≤105),表示查询的数量。接下来的 q 行每行包含两个整数 t1 和 t2(0≤t1≤t2≤103),表示一个时间段。
- 保证所有测试用例的 n1+n2 之和以及 q 之和分别不超过 105,且 z1<z2<z0。
输出格式
对于每个查询,输出一个实数表示平均照亮面积。只有当你的答案与正确答案的相对误差或绝对误差不超过 10−4 时,才被视为正确。
1
0 0 3 0 -1
4 1
1 0
3 0
3 2
1 2
4 2
0 0
1 0
1 1
0 1
3
0 10
1 2
1 1
0.450000000
1.125000000
2.250000000
提示
对于此示例,凸多边形 P1 和 P2 在 t=0 时刻在 xOy 平面上的投影,以及这些投影的运动,如下图所示。多边形 A1B1C1D1 是多边形 P1 的投影,多边形 A2B2C2D2 是多边形 P2 的投影。
:::align{center}
:::
翻译由 DeepSeek V3 完成