Universal Cup Judging System

Universal Cup

Time Limit: 4.0 s Memory Limit: 1024 MB Total points: 100 Difficulty: [show] Hackable ✓
Statistics

作为一个动漫迷,Haru 最近买了一台投影仪,以便在墙上的大屏幕上享受家庭影院。然而,这台投影仪的性价比很高:它价格低廉,功能也仅仅是“能用”。它提供的调节功能有限,且被固定在支架上;因此,经常会出现画面不对齐的情况。幸运的是,它有一个手动梯形校正功能,可以将图像的四个角对齐到给定的点,从而确保输出尽可能接近原始的宽高比。

投影仪不对齐的示例。

梯形校正及最终结果。这是 Haru 对第一个样例的解决方案。

投影仪被描述为一个点光源,以及位于透镜平面上宽度为 $w$、高度为 $h$ 的透镜矩形的四个角。透镜矩形定义了所需画面的宽高比,记为 $w : h$ —— 例如,在实际应用中,简化后的宽高比通常为 $4 : 3$ 或 $16 : 9$。光束由透镜矩形限定,并最终投射到屏幕上,屏幕是墙面上的一个矩形。

Haru 的挑战是为梯形校正获取透镜矩形中的四个锚点,使得校正后的投影是一个矩形,该矩形保持了透镜矩形的宽高比,且其底边(具有最小最大 $z$ 坐标的边)平行于 $xOy$ 平面,并完全落在屏幕内。

厌倦了手动调整墙上的轮廓,Haru 决定编写一个程序来实现梯形校正算法,以计算一个好的投影矩形的最大面积。

输入格式

输入包含多个测试用例。第一行包含一个整数 $T$ ($1 \le T \le 1000$),表示测试用例的数量。对于每个测试用例,共有八行:

  • 前四行中,第 $i$ 行包含整数 $x_i, y_i, z_i$ ($|x_i|, |z_i| \le 100, 1 \le y_i \le 100, \max\{x_1, x_4\} < \min\{x_2, x_3\}, \max\{z_1, z_2\} < \min\{z_3, z_4\}$),表示透镜矩形的一个角 $(x_i, y_i, z_i)$。
  • 接下来的四行中,第 $i$ 行包含整数 $u_i, v_i, w_i$ ($|u_i|, |w_i| \le 1000, (\max_{j=1}^4 y_j) < v_i \le 1000, u_1 = u_4 < u_2 = u_3, v_1 = v_4 < v_2 = v_3, w_1 = w_2 < w_3 = w_4$),表示屏幕矩形的一个角 $(u_i, v_i, w_i)$。

每四个点构成一个矩形,并按左下、右下、右上和左上角的顺序排列(参见上述关于 $x$ 和 $z$ 坐标的约束)。光源位于 $(0, 0, 0)$。设透镜左下角和右下角之间的距离为 $w$,左下角和左上角之间的距离为 $h$。则 $1 \le \frac{w}{h} \le 4$。为了确保投影大致沿着前方($y$ 轴正方向)进行,还有一些额外的约束:

  • 墙面垂直于 $xOy$ 平面,且屏幕的底边平行于 $xOy$ 平面。
  • 透镜矩形和点 $(0, 0, 0)$ 都在墙的同一侧,且距离墙至少 1 个单位。图像平面到 $(0, 0, 0)$ 的距离至少为 1 个单位。
  • 屏幕底边与 $x$ 轴之间的夹角不超过 $\frac{\pi}{18} = 10^\circ$。透镜底边与 $x$ 轴之间的夹角不超过 $\frac{\pi}{18} = 10^\circ$。
  • 光束通过透镜投射到墙面上,照亮面积最大为 $10^6$ 平方单位的区域。屏幕与未校正投影的交集至少为 1 平方单位。

输出格式

对于每个测试用例,输出一行,为一个十进制实数,表示答案。如果答案的绝对误差或相对误差不超过 $10^{-6}$,则被视为正确。

样例

输入 1

2
-20 23 -36
20 23 -36
20 41 -12
-20 41 -12
-50 80 -100
50 79 -100
50 79 -20
-50 80 -20
-1 2 4
1 2 4
1 3 5
-1 3 5
-20 6 0
20 6 0
20 6 20
-20 6 20

输出 1

5450.0656584647
5.6568542495

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.