#P15553. [CCPC 2025 哈尔滨站] 液压机

[CCPC 2025 哈尔滨站] 液压机

题目描述

在一个二维试验场中,以四条无限长直线作为可移动的“墙”:上下为水平线,左右为竖直线。放入一颗大小可忽略不计的小球后,小球做匀速直线运动;每当与某对平行墙中的一条发生接触,沿该法向方向进行反弹(仅改变该方向的速度符号),另一方向保持不变。上下两条水平线相向而行,左右两条竖直线相对而行,最终会在某一时刻合拢并将小球夹住。

给定小球的初始位置与速度,以及四条直线的初始位置与速度。你需要以上下两线相遇时刻为终止时刻,输出该时刻小球的坐标。

小球的初始位置记为 (xbeg,ybeg)(x_{beg}, y_{beg}),初始速度记为 (vx,vy)(v_x, v_y)

下方的水平线和上方的水平线初始时分别位于 y=y1y = y_1y=y2y = y_2, 在经过时间 tt 后移动到 y=y1+vy1ty = y_1 + v_{y_1} ty=y2vy2ty = y_2 - v_{y_2} t

左边的竖直线和右边的竖直线初始时分别位于 x=x1x = x_1x=x2x = x_2,在经过时间 tt 后移动到 x=x1vx1tx = x_1 - v_{x_1} tx=x2+vx2tx = x_2 + v_{x_2} t

保证初始时小球一定在四条直线围成的矩形内部,即 x1<xbeg<x2x_1 < x_{beg} < x_2y1<ybeg<y2y_1 < y_{beg} < y_2

:::align{center}

样例初始情况 :::

我们保证每次碰撞都是小球先撞上墙,即保证小球在竖直方向的速度一定大于两条水平线的运动速度,vy1,vy2<vyv_{y_1},v_{y_2} < |v_y|

为了保证上下两条线必定相遇,保证两条水平线的速度不同时为 00

发生碰撞时具体的规则如下:

  1. 小球在不接触任何直线时做匀速直线运动。
  2. 与水平线接触时,仅将纵向速度取相反数(把 vyv_y 变为 vy-v_y),横向速度不变。
  3. 与竖直线接触时,仅将横向速度取相反数(把 vxv_x 变为 vx-v_x),纵向速度不变。
  4. 反弹判定与直线的平移速度无关,仅按“取相反数”处理对应速度分量。

输入格式

题目包含多组测试数据。输入第一行包含一个整数 T(1T102)T (1 \leq T \leq 10^2),表示测试数据组数。

接下来依次输入每组测试数据,对于每组测试数据:

第一行包含四个整数 xbeg,ybeg,vx,vyx_{beg},y_{beg},v_x,v_y (20vx,vy20-20 \leq v_x,v_y \leq 20, vx0v_x \ne 0vy0v_y \ne 0),分别表示小球的初始坐标以及初始速度。

第二行包含四个整数 y1,y2,vy1,vy2y_1,y_2,v_{y_1},v_{y_2} (0y1<ybeg<y21060 \leq y_1 < y_{beg} < y_2 \leq 10^6, 0vy1,vy2<vy0 \le v_{y_1}, v_{y_2} < |v_y|, vy1+vy20v_{y_1} + v_{y_2} \neq 0),分别表示水平线的初始位置和运动速度。

第三行包含四个整数 x1,x2,vx1,vx2x_1,x_2,v_{x_1},v_{x_2} (0x1<xbeg<x21060 \leq x_1 < x_{beg} < x_2 \leq 10^6, 0vx1,vx2200 \le v_{x_1}, v_{x_2} \le 20),分别表示竖直线初始位置和运动速度。

输出格式

对于每组数据输出一行两个用空格分隔的浮点数 x,yx,y ,表示小球终止时刻的坐标。

如果你的输出和标准答案的绝对误差或相对误差不超过 10310^{-3},那么你的答案将会被判为正确。

换句话说假设你的答案是 outout,标准答案为 ansans,则如果:

outansmax(1,ans)103\frac{|out-ans|}{\max(1,|ans|)} \le 10^{-3}

则你的答案会被视作正确的。

1
3 4 2 5
0 10 3 2
0 10 1 0
7.000000000000 6.000000000000
2
631043 768016 20 20
1 1000000 1 0
631040 631050 1 0
631044 768016 20 20
1 1000000 1 0
631041 631051 1 0
-0.456742460183 1000000.000000000000
0.543257539817 1000000.000000000000