#P16612. [GCPC2018]GPS

[GCPC2018]GPS

题目描述

你和许多人一样,或许使用过全球定位系统(GPS),但也可能好奇它究竟是如何工作的。

GPS 定位依赖一组绕地球运行的卫星。所有卫星都拥有同步的内部时钟,并持续通过无线电波向地球表面发送其内部时钟的数值。GPS 接收器会同时接收若干颗可见卫星发出的信号。在同一时刻 tt 收集到的时间测量值 t1,t2,,tmt_1,t_2,\ldots,t_m 通常不同,因为每颗卫星与接收器之间的距离不同。

由于所有卫星的轨道都是已知的,我们可以确定每颗卫星发出信号时所在的位置,再根据位置和距离计算接收器的位置。假设接收器位于地球表面,至少需要三颗卫星的测量结果才能唯一确定位置。

不过,你的任务并不是计算自己的位置,而是判断自己收到了哪些卫星的信号。

给定你在地球表面的地理坐标以及所有卫星轨道的描述,对于每颗卫星,你需要确定:

  • 卫星在给定时刻发出的信号能否到达你的位置。无线电波沿直线传播;当且仅当传播路径不穿过地球时,信号能够到达;
  • 若信号能够到达,计算信号从卫星传播到你所在位置所需的时间。

假设无线电波以光速传播,光速为

299792458 米/秒。299\,792\,458\ \text{米/秒}。

将地球视为半径为 63716371 千米的完美球体。所有 GPS 卫星均以固定速度沿圆形轨道运行,轨道圆心与地球球心重合。

输入格式

输入包含:

  • 第一行一个整数 ss1s1041\le s\le 10^4),表示卫星数量;
  • 第二行两个实数 o,a\ell_o,\ell_a,分别表示你所在位置的经度和纬度;
  • 接下来 ss 行,每行四个实数 φ,ψ,r,x\varphi,\psi,r,x,描述一颗卫星。

你所在位置的坐标满足:

  • 经度 o[180,180]\ell_o\in[-180,180]。正数表示东经,负数表示西经;
  • 纬度 a[90,90]\ell_a\in[-90,90]。正数表示北纬,负数表示南纬。

每颗卫星的参数含义如下:

  • φ[180,180]\varphi\in[-180,180]:卫星轨道与地球赤道相交处的参考经度。每条轨道至少与赤道相交两次。正数表示东经,负数表示西经;
  • ψ[0,360]\psi\in[0,360]:卫星在经度 φ\varphi 处穿过赤道时,其运行方向与地球赤道向东方向之间的夹角。00180180 之间表示卫星向北运动,180180360360 之间表示卫星向南运动。若轨道与赤道共面,则 ψ\psi00180180
  • r[7000,106]r\in[7000,10^6]:卫星轨道的半径,单位为千米;
  • x[0,1)x\in[0,1):从轨道在经度 φ\varphi 处与赤道的交点开始计算,在信号发出时卫星已经走过的轨道比例。

输入中的所有实数,小数点后最多有三位。

保证每颗卫星与接收点处切平面之间的距离至少为 11 米,因此可以安全地使用浮点运算。

输出格式

对于每颗卫星输出一行:

  • 若该卫星发出的信号无法到达你的位置,输出:
no signal
  • 否则,输出信号从卫星传播到你的位置所需的时间,单位为秒。

浮点答案的相对误差或绝对误差不超过 10710^{-7} 即可。

样例

输入

3
45.0 45.0
0.0 45.0 7500.0 0.125
0.0 60.0 7000.0 0.3
-50.0 5.0 25000.0 0.3

输出

0.00773245
no signal
0.0690288

图示

图中红色曲线表示卫星轨道,红点表示卫星的实际位置。地球表面的实线表示赤道和本初子午线;与赤道共面的虚线圆与卫星轨道具有相同半径。角 φ\varphiψ\psi 的含义见输入说明。黑点表示你在地球表面的位置,需要计算信号沿蓝色线段传播所需的时间。