Global Positioning System (GPS) is a navigation system based on a set of satellites orbiting approximately 20,000 kilometers above the earth. Each satellite follows a known orbit and transmits a radio signal that encodes the current time. If a GPS-equipped vehicle has a very accurate clock, it can compare its own local time with the time encoded in the signals received from the satellites. Since radio signals propagate at a known rate, the vehicle can compute the distance between its current location and the location of the satellite when the signal was broadcast. By measuring its distance from several satellites in known orbits, a vehicle can compute its position very accurately.

You must write a simple ``autopilot" program based on GPS navigation. To make the problem easier, we state it as a two-dimen sional problem. In other words, you do not need to take into account the curvature of the earth or the altitude of the satellites. Furthermore, the problem uses speeds that are more appropriate for airplanes and sound waves than for satellites and radio waves.

Given a set of signals from moving sources, your program must compute the receiving position on the Cartesian plane. Then, given a destination point on the plane, your program must compute the compass heading required to go from the receiving position to the destination. All compass headings are stated in degrees. Compass heading 0 (North) corresponds to the positive y direction, and compass heading 90 (East) corresponds to the positive x direction, as shown in Figure 1.

Input

The input consists of multiple data sets.

The first line of input in each data set contains an integer N ( 1N10), which is the number of signal sources in the set. This is followed by three floating point numbers: tx, and y. Here, t denotes the exact local time when all the signals are received, represented in seconds after the reference time (time 0), andx and y represent the coordinates of the destination point on the Cartesian plane. Each of the next N lines contains four floating-point numbers that carry information about one signal source. The first two numbers represent the known position of the signal source on the Cartesian plane at the reference time. The third number represents the direction of travel of the signal source in the form of a compass heading D ( 0D < 360). The fourth number is the time that is encoded in the signal-that is, the time when the signal was transmitted, represented in seconds after the reference time. The magnitudes of all numbers in the input file are less than 10000 and no floating-point number has more than 5 digits after the decimal point.

The last data set is followed by a line containing four zeros.

The unit distance in the coordinate space is one meter. Assume that each signal source is moving over the Cartesian plane at a speed of 100 meters per second and that the broadcast signal propagates at a speed of 350 meters per second. Due to inaccuracies in synchronizing clocks, assume that your distance calculations are accurate only to 0.1 meter. That is, if two points are computed to be within 0.1 meter of each other, you should treat them as the same point. There is also the possibility that a signal may have been corrupted in transmission, so the data received from multiple signals may be inconsistent.

Output

For each trial, print the trial number followed by the compass heading from the receiving location to the destination, in degrees rounded to the nearest integer. Use the labeling as shown in the example output. If the signals do not contain enough information to compute the receiving location (that is, more than one position is consistent with the signals), print ` Inconclusive '. If the signals are inconsistent (that is, no position is consistent with the signals), print ` Inconsistent '. If the receiving location is within 0.1 meter of the destination, print ` Arrived '. If the situation is Inconclusive or Inconsistent, then you do not need to consider the case Arrived.

Figure 2 above corresponds to the first sample input. The locations of the three satellites at time t = 0are A (-100,350), B (350,-100) and C (350,800). The signals received by the GPS unit were transmitted at time t = 1.75, when the satellites were at locations A', B', and C' (however, in general the signals received by the GPS unit might have been transmitted at different times). The signals from the three satellites converge at D at time t = 2.53571, which means D is the location of the receiving GPS unit. From point D, a compass course of 45 degrees leads toward the destination point of (1050, 1050).

Sample Input

3  2.53571  1050.0  1050.0
-100.0 350.0 90.0 1.75
350.0 -100.0 0.0 1.75
350.0 800.0 180.0 1.75
2 2.0 1050.0 1050.0
-100.0 350.0 90.0 1.0
350.0 -100.0 0.0 1.0
0 0 0 0

Sample Output

Trial 1: 45 degrees
Trial 2: Inconclusive
#include<cstdio>
#include<cmath>
double t,x,y,ox[12],oy[12],r[12],px,py,dx,dy,dr,degree,ti,pi,dis,lx,ly,xa,ya,xb,yb;
int n,i,cases,c1,c2; int check(double x,double y)
{
int i;
double dx,dy;
for(i=0;i<n;i++)
{
dx=x-ox[i];
dy=y-oy[i];
dr=sqrt(dx*dx+dy*dy)-r[i];
if(fabs(dr)>0.1)
return 0;
}
return 1;
} int main()
{
pi=acos(-1.0);
while(scanf("%d%lf%lf%lf",&n,&t,&x,&y)&&n)
{
for(i=0;i<n;i++)
{
scanf("%lf%lf%lf%lf",&px,&py,°ree,&ti);
degree=(90-degree)/180*pi;
dis=100*ti;
ox[i]=px+dis*cos(degree);
oy[i]=py+dis*sin(degree);
r[i]=350*(t-ti);
}
printf("Trial %d: ",++cases);
for(i=1;i<n;i++)
{
dx=ox[i]-ox[0];
dy=oy[i]-oy[0];
dr=r[i]-r[0];
if(dx*dx+dy*dy+dr*dr>0.01)
break;
}
if(i>=n)
{
puts("Inconclusive");
continue;
}
dis=sqrt(dx*dx+dy*dy);
if(dis<0.1)
{
puts("Inconsistent");
continue;
}
lx=(dis*dis+r[0]*r[0]-r[i]*r[i])/dis/2;
if(fabs(lx)>r[0]+0.1)
{
puts("Inconsistent");
continue;
}
if(lx>r[0])
lx=r[0];
if(lx<-r[0])
lx=-r[0];
ly=sqrt(r[0]*r[0]-lx*lx);
dx/=dis;
dy/=dis;
xa=ox[0]+dx*lx-dy*ly;
ya=oy[0]+dy*lx+dx*ly;
xb=ox[0]+dx*lx+dy*ly;
yb=oy[0]+dy*lx-dx*ly;
if(sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb))<0.1)
{
xb=1e9;
yb=1e9;
}
c1=check(xa,ya);
c2=check(xb,yb);
if(c1+c2==1)
{
if(c2)
{
xa=xb;
ya=yb;
}
dx=x-xa;
dy=y-ya;
dis=sqrt(dx*dx+dy*dy);
if(dis<0.1)
puts("Arrived");
else
{
if(dy>0)
degree=acos(dx/dis);
else
degree=pi*2-acos(dx/dis);
degree=90-degree/pi*180;
if(degree<0)
degree+=360;
if(degree>360)
degree-=360;
printf("%.0lf degrees\n",degree);
}
}
else
if(c1)
puts("Inconclusive");
else
puts("Inconsistent");
}
return 0;
}

1034 - Navigation的更多相关文章

  1. arcgis api for js共享干货系列之二自定义Navigation控件样式风格

    arcgis api for js默认的Navigation控件样式风格如下图: 这样的风格不能说不好,各有各的爱好,审美观,这里也不是重点,这里的重点是如何自定义一套自己喜欢的样式风格呢:自己自定义 ...

  2. The Safe Navigation Operator (&.) in Ruby

    The most interesting addition to Ruby 2.3.0 is the Safe Navigation Operator(&.). A similar opera ...

  3. Unity3D 导航网格自动寻路(Navigation Mesh)

    NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路..导航时,只需要给导 ...

  4. ABP理论学习之导航(Navigation)

    返回总目录 本篇目录 创建菜单 注册导航提供者 展示菜单 每一个web应用在页面之间都有一些要导航的菜单.ABP提供了公用的基础设施来创建菜单并将菜单展示给用户. 创建菜单 一个应用可能由不同的模块组 ...

  5. Sharepoint学习笔记—ECM系列—文档列表的Metedata Navigation与Key Filter功能的实现

    如果一个文档列表中存放了成百上千的文档,想要快速的找到你想要的还真不是件容易的事,Sharepoint提供了Metedata Navigation与Key Filter功能可以帮助我们快速的过滤和定位 ...

  6. iOS第八课——Navigation Controller和Tab bar Controller

    今天我们要学习Navigation Controller和Tab bar Controller. Navigation Controller是iOS编程中比较常用的一种容器,用来管理多个视图控制器. ...

  7. navigation和tabbar上的文字.图片 自定义

    [[UITabBarItem appearance] setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor blackColor] ...

  8. navigation controller

    一.程序框架 1.程序结构

  9. Xcode6 storyboard new push segue 后的视图控制器没有navigation item bug.

    手动切一下 老的push,再切回来,就会出有了,我想是一个bug. Xcode 6 Segue with UINavigationItem up vote0down votefavorite   I' ...

随机推荐

  1. 打jar包的方法

    打jar包的方法是什么? java打jar包,引用其他.jar文件 java项目打jar包 将java源码打成jar包 maven打jar例子 打war包的方法是什么? Eclipse->项目右 ...

  2. android之GridView实现九宫格布局

    效果图: 代码如下: MyGridView.java /** * 自定义GridView 解决在scrollview中只显示第一行数据的问题 * Created by Spring on 2015/1 ...

  3. WPF画N角芒星,正N角星

    计算顶部三角形坐标方法: /// <summary> /// 获取顶三角形坐标 /// </summary> /// <param name="r"& ...

  4. C++重载操作符

    重载的函数操作符,对对象使用起来就像对象是一个函数一样 class A{public:A(int n);int operator()(int n);  //需要一个参数,返回int类型void out ...

  5. Java学习笔记——SequenceInputStream类合并文件的综合举例分析

    SequenceInputStream 介绍 SequenceInputStream 类表示其他输入流的逻辑串联,即文件的合并. 它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾, ...

  6. win7开机密码忘记了

    开机到欢迎界面时,出现输入用户名密码的提示框,按Ctrl+Alt+Delete,跳出帐号窗口,输入用户名:administrator,回车即可. 如果这个administrator帐号也有密码,那么可 ...

  7. Asp.net core与golang web简单对比测试

    最近因为工作需要接触了go语言,又恰好asp.net core发布RC2,就想简单做个对比测试. 下面是测试环境: CPU:E3-1230 v2 内存:16G 电脑有点不给力 操作系统:Centos7 ...

  8. NET调用Java之100-Continue的坑

    场景:这段时间开发的时候遇到了需要NET调用java的restful api的情况,java端用的服务器是tomcat,框架是spring boot,net调用java端的接口之后只要java端的接口 ...

  9. Android中的手势

    Android对两种手势行为提供了支持:1.对于第一种手势行为而言,Android提供了手势检测,并为手势检测提供了相应的监听器.2.对于第二种手势行为,Android允许开发者添加手势,并提供了相应 ...

  10. 说说自己对RESTful API的理解s

    REST不是英文上的rest单词,其英文缩写为presentational State Transfer ,直译为表现状态转移,咋看起来很学术,不懂,其实不用去死抠这个词的意思.REST是一种约束和架 ...