题号:NC232545
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述
如图所示,在一边长为

的等边三角形边框围成的区域内,放置一半径为

的小球。
以等边三角形底边与该边的高线交点为坐标原点建立直角坐标系,三角形三个顶点的坐标分别为
)
,
)
,
)
,小球的初始坐标为
)
。
小球在水平方向的速度为

每秒,竖直方向的速度为

每秒,小球的初速度大小为

。方向沿向量
)
。
当小球未碰撞到等边三角形区域的边缘时,假设一开始小球位于
)
的位置,则经过

秒后小球将移动到
)
的位置。
当小球碰撞到等边三角形边缘时,产生完全弹性碰撞,也就是说碰撞前后速度的大小不变,仍为

。
角度遵循"入射角等于反射角"的规则,如图所示

与

角相等。
现在告诉你等边三角形边框的边长

,小球的初始坐标位于三角形内部的
)
,小球的速度恒定为
)
,问小球恰好碰撞边缘k次用时多少?
输入描述:
第一行输入一个正整数
)
接下来
行每行输入6个整数
,
,
,
,
,
,
,
。
输出描述:
对于每组数据,输出一个实数表示问题的答案。
你的答案正确,当且仅当误差不超过
。即只要满足 fabs(stdvalue - yourvalue) / max(1.0, fabs(stdvalue)) < 1e-4的答案均正确。
示例1
输入
复制
4
4000 0 1732 1000 0 1
4000 0 1732 1000 0 1000000
4000 0 1234 0 -1 1
4000 -1000 1 0 1000 925469
输出
复制
1.00002957
1999998.99997035
1233.99999975
1602959.32782988
备注:
题目保证,对于每组测试数据,小球在进行前k次碰撞的过程中不会同时碰撞到两边的边缘。

但是当小球进行完k次碰撞后的移动过程不保证碰撞点不会同时碰撞到两边的边缘,例如样例中第3组数据。
"不会同时碰撞到两边的边缘"指对于小球移动的过程中的任何一个时刻,不存在小球 球心距离三角形两条边的距离同时等于