公元 10,007 年,阿拉伯地区的所有美食都已绝迹。幸运的是,你曾进行过一次时间旅行,品尝过这些食物的美味。一个外星传言告诉你,木星上仍然存有阿拉伯美食。由于外星人的传言与人类不同,通常都是真实的,你决定建造自己的宇宙飞船前往木星。为了测试你嵌入飞船的控制系统,你想建造一个飞行模拟器,这是一种用于宇航员训练及其他目的,能够人工模拟航天器飞行及其飞行环境的装置。
在这个问题中,飞行模拟器由一个边长为 $L$ 的二维等边三角形组成,三个执行器(机械装置,可视为可变长度的线段)分别连接到三角形的顶点 $A, B, C$。执行器的另一端都连接到一个位于 $(0, 0, -H)$ 的静态基点。三角形的中点(位于 $(0, 0, 0)$)通过球形连接固定在同一基点上,这意味着三角形可以向任何方向旋转,但其中点不能移动。
操纵杆(用于控制三角形旋转的装置)的方向向量为 $\mathbf{N} = (N_x, N_y, N_z)$,它始终垂直于三角形所在的平面。通过改变操纵杆的方向,每个执行器的长度会发生变化,三角形也会随之旋转(操纵杆始终保持垂直于三角形),而中点保持在 $(0, 0, 0)$。最初,所有执行器的长度相同,三角形水平放置在 $XY$ 平面上(即 $z=0$),操纵杆指向正 $Z$ 轴方向(即初始时 $\mathbf{N} = (0, 0, 1)$)。点 $A$ 最初位于负 $X$ 轴上($z_A = y_A = 0, x_A < 0$),且顶点 $A, B, C$ 相对于操纵杆方向呈逆时针顺序排列。
我们需要你编写一个程序,根据给定的新操纵杆方向使模拟器旋转。形式化地说,给定旋转后的操纵杆方向和旋转后点 $A$ 的位置,我们需要你计算分别连接到顶点 $A, B, C$ 的执行器长度 $L_1, L_2, L_3$,使得操纵杆方向仍然垂直于三角形。
输入格式
输入的第一行包含一个整数 $T$,表示测试用例的数量。
每个测试用例包含一行,包含八个整数 $N_x, N_y, N_z, A_x, A_y, A_z, L$ 和 $H$($-500 \le A_x, A_y, A_z, N_x, N_y \le 500, 1 \le N_z, H, L \le 500$),其中 $N_x, N_y, N_z$ 是旋转后的操纵杆方向,$A_x, A_y, A_z$ 是旋转后点 $A$ 的位置,$L$ 是三角形的边长,$H$ 是执行器连接的基点高度。
保证所有测试用例满足以下约束: $A_x, A_y, A_z \neq 0$ $A_x N_x + A_y N_y + A_z N_z = 0$ * $A_x^2 + A_y^2 + A_z^2 = \frac{L^2}{3}$
输出格式
对于每个测试用例,输出一行,包含三个用空格分隔的十进制数(保留小数点后 6 位),即连接到顶点 $A, B, C$ 的执行器长度 $L_1, L_2, L_3$。
输入保证有且仅有一个解。结果将通过相对误差进行检查。
样例
输入格式 1
2 13 -18 1 7 5 -1 15 12 -12 -17 1 7 -5 -1 15 3
输出格式 1
13.964240 20.238885 7.237923 8.831761 11.473743 6.507936
说明
下图展示了飞行模拟器在不同操纵杆方向下的不同位置:
在 XZ 平面旋转
在 YZ 平面旋转