1034 - Navigation
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: t, x, 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的更多相关文章
- arcgis api for js共享干货系列之二自定义Navigation控件样式风格
arcgis api for js默认的Navigation控件样式风格如下图: 这样的风格不能说不好,各有各的爱好,审美观,这里也不是重点,这里的重点是如何自定义一套自己喜欢的样式风格呢:自己自定义 ...
- The Safe Navigation Operator (&.) in Ruby
The most interesting addition to Ruby 2.3.0 is the Safe Navigation Operator(&.). A similar opera ...
- Unity3D 导航网格自动寻路(Navigation Mesh)
NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路..导航时,只需要给导 ...
- ABP理论学习之导航(Navigation)
返回总目录 本篇目录 创建菜单 注册导航提供者 展示菜单 每一个web应用在页面之间都有一些要导航的菜单.ABP提供了公用的基础设施来创建菜单并将菜单展示给用户. 创建菜单 一个应用可能由不同的模块组 ...
- Sharepoint学习笔记—ECM系列—文档列表的Metedata Navigation与Key Filter功能的实现
如果一个文档列表中存放了成百上千的文档,想要快速的找到你想要的还真不是件容易的事,Sharepoint提供了Metedata Navigation与Key Filter功能可以帮助我们快速的过滤和定位 ...
- iOS第八课——Navigation Controller和Tab bar Controller
今天我们要学习Navigation Controller和Tab bar Controller. Navigation Controller是iOS编程中比较常用的一种容器,用来管理多个视图控制器. ...
- navigation和tabbar上的文字.图片 自定义
[[UITabBarItem appearance] setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor blackColor] ...
- navigation controller
一.程序框架 1.程序结构
- Xcode6 storyboard new push segue 后的视图控制器没有navigation item bug.
手动切一下 老的push,再切回来,就会出有了,我想是一个bug. Xcode 6 Segue with UINavigationItem up vote0down votefavorite I' ...
随机推荐
- 《Java编程思想》之重点笔记——多态性理解
Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意味着通常情况下,我们不必判定是否应该进行动态绑定— ...
- DNN - Modules - QR Code Generator
Dotnetnuke 平台上的二维码模块.支持DNN 7.x平台的安装 QR码(快速响应码)是二维条形码.随着移动设备市场正以快速的步伐,QR码正在成为非常重要的营销工具.与移动电话或平板电脑的扫描, ...
- android之GridView实现九宫格布局
效果图: 代码如下: MyGridView.java /** * 自定义GridView 解决在scrollview中只显示第一行数据的问题 * Created by Spring on 2015/1 ...
- SQL Server 和CLR集成
通过在 Microsoft SQL Server 中托管 CLR(称为 CLR 集成),可以在托管代码中编写存储过程.触发器.用户定义函数.用户定义类型和用户定义聚合函数. 因为托管代码在执行之前会编 ...
- PHP 错误处理
PHP 错误处理 在 PHP 中,默认的错误处理很简单.一条错误消息会被发送到浏览器,这条消息带有文件名.行号以及描述错误的消息. PHP 错误处理 在创建脚本和 Web 应用程序时,错误处理是一个重 ...
- Android的消息处理机制(Looper,Handler,Message)(转)
Handler Handler的定义: 主要接收子线程发送的数据,并用此数据配合主线程更新UI. 当应用程序启动时,Android首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI空间进 ...
- Spring4.0学习笔记(3) —— Spring_Bean之间的关系
1.继承关系 bean-relation.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...
- 自定义ORM框架(转转)
ORM背景 在数据库界,主流的数据库都是关系型数据库,其采用的关系型数据结构模型,无论从数学上还是实践中都相当的成熟,得到非常广泛的应用.在关系型数据结构理 论中,所有的数据都组织成一个个相互独立的二 ...
- 无缝滚动js (手写通俗易懂)
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 最完美的匹配网页中图片 src 部分的正则表达式
$str='<p style="padding: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 200%;"& ...