题目解析
对于任意时刻 SiS_iSi ,我们考虑小码君的位置为 (X0,Y0,Z0)(X_0, Y_0, Z_0)(X0 ,Y0 ,Z0 ),小码酱的位置为 (X1,Y1,Z1)(X_1, Y_1, Z_1)(X1 ,Y1 ,Z1 ),那么二者之间的俯角或仰角度数为:
arctan(∣Z0−Z1∣(X0−X1)2+(Y0−Y1)2)⋅180π\arctan\left(\frac{\vert Z_0 - Z_1 \vert}{\sqrt{(X_0 - X_1)^2 + (Y_0 - Y_1)^2}}\right) \cdot \frac{180}{\pi} arctan((X0 −X1 )2+(Y0 −Y1 )2 ∣Z0 −Z1 ∣ )⋅π180
我们假定摩天轮的位置都是 (0,0)(0, 0)(0,0),然后根据计算出的位置,加上原来的位置,就可以得出实际的位置。
接下来我们考虑对于位置为 (0,0)(0, 0)(0,0), 高度为 LLL,匀速转一圈时间为 TTT 的摩天轮,小码君或小码酱在 000 时刻登上摩天轮后,在任意时刻 SiS_iSi 的位置如何计算。
我们考虑从左侧(或沿 XXX 轴正方向一侧)看向摩天轮,将其考虑为一个圆,将高度的一半考虑为其半径。
我们考虑这个圆在一个独立的二维平面坐标系上,其圆心坐标为 (0,0)(0, 0)(0,0),半径为 rrr。
我们可以根据弧度 ppp 和半径 rrr 来计算出,在这个圆上任意一点的位置:
(r×cos(p),r×sin(p))(r \times \cos(p),\quad r \times \sin(p)) (r×cos(p),r×sin(p))
考虑摩天轮上一点随时间 SiS_iSi ,产生的弧度为 SiT\dfrac{S_i}{T}TSi ,由于摩天轮上的起始位置为摩天轮的正下方,所以我们在计算时,这个弧度要减去 14\dfrac{1}{4}41 ,所以我们最终传入的参数为:
(SiT−14)⋅2π\left(\frac{S_i}{T} - \frac{1}{4}\right) \cdot 2\pi (TSi −41 )⋅2π
接下来我们考虑计算出的答案如何结合原位置,算出实际位置:
1. 对于 XXX 轴,摩天轮任意时刻 XXX 坐标不变。
2. 对于 YYY 轴,由于实际上的摩天轮的运动轨迹,我们将独立坐标系上得出的 YYY 其映射到实际坐标时,要取相反数,同时加上原来的 YYY 轴位置即可。
3. 对于 ZZZ 轴,由于单独考虑的圆的圆心为 (0,0)(0, 0)(0,0),但是实际的摩天轮的中心位置高度为 L2\dfrac{L}{2}2L ,所以计算出的 ZZZ 轴的坐标,要加上 L2\dfrac{L}{2}2L 。
AC代码