P15553 [CCPC 2025 哈尔滨站] 液压机
题目描述
在一个二维试验场中,以四条无限长直线作为可移动的“墙”:上下为水平线,左右为竖直线。放入一颗**大小可忽略不计**的小球后,小球做匀速直线运动;每当与某对平行墙中的一条发生接触,沿该法向方向进行反弹(**仅改变该方向的速度符号**),另一方向保持不变。上下两条水平线相向而行,左右两条竖直线相对而行,最终会在某一时刻合拢并将小球夹住。
给定小球的初始位置与速度,以及四条直线的初始位置与速度。你需要以上下两线相遇时刻为终止时刻,输出该时刻小球的坐标。
小球的初始位置记为 $(x_{beg}, y_{beg})$,初始速度记为 $(v_x, v_y)$。
下方的水平线和上方的水平线初始时分别位于 $y = y_1$ 和 $y = y_2$, 在经过时间 $t$ 后移动到 $y = y_1 + v_{y_1} t$ 和 $y = y_2 - v_{y_2} t$。
左边的竖直线和右边的竖直线初始时分别位于 $x = x_1$ 和 $x = x_2$,在经过时间 $t$ 后移动到 $x = x_1 - v_{x_1} t$ 与 $x = x_2 + v_{x_2} t$。
保证初始时小球一定在四条直线围成的矩形内部,即 $x_1 < x_{beg} < x_2$,$y_1 < y_{beg} < y_2$。
:::align{center}

样例初始情况
:::
我们保证每次碰撞都是小球先撞上墙,即保证小球在竖直方向的速度一定大于两条水平线的运动速度,$v_{y_1},v_{y_2} < |v_y|$。
为了保证上下两条线必定相遇,保证两条水平线的速度不同时为 $0$。
发生碰撞时具体的规则如下:
1. 小球在不接触任何直线时做匀速直线运动。
2. 与水平线接触时,仅将纵向速度取相反数(把 $v_y$ 变为 $-v_y$),横向速度不变。
3. 与竖直线接触时,仅将横向速度取相反数(把 $v_x$ 变为 $-v_x$),纵向速度不变。
4. **反弹判定与直线的平移速度无关,仅按“取相反数”处理对应速度分量。**
输入格式
题目包含多组测试数据。输入第一行包含一个整数 $T (1 \leq T \leq 10^2)$,表示测试数据组数。
接下来依次输入每组测试数据,对于每组测试数据:
第一行包含四个整数 $x_{beg},y_{beg},v_x,v_y$ ($-20 \leq v_x,v_y \leq 20$, $v_x \ne 0$、$v_y \ne 0$),分别表示小球的初始坐标以及初始速度。
第二行包含四个整数 $y_1,y_2,v_{y_1},v_{y_2}$ ($0 \leq y_1 < y_{beg} < y_2 \leq 10^6$, $0 \le v_{y_1}, v_{y_2} < |v_y|$, $v_{y_1} + v_{y_2} \neq 0$),分别表示水平线的初始位置和运动速度。
第三行包含四个整数 $x_1,x_2,v_{x_1},v_{x_2}$ ($0 \leq x_1 < x_{beg} < x_2 \leq 10^6$, $0 \le v_{x_1}, v_{x_2} \le 20$),分别表示竖直线初始位置和运动速度。
输出格式
对于每组数据输出一行两个用空格分隔的浮点数 $x,y$ ,表示小球终止时刻的坐标。
如果你的输出和标准答案的绝对误差或相对误差不超过 $10^{-3}$,那么你的答案将会被判为正确。
换句话说假设你的答案是 $out$,标准答案为 $ans$,则如果:
$$
\frac{|out-ans|}{\max(1,|ans|)} \le 10^{-3}
$$
则你的答案会被视作正确的。