I:地图的省钱计划.docx_第1页
I:地图的省钱计划.docx_第2页
I:地图的省钱计划.docx_第3页
I:地图的省钱计划.docx_第4页
I:地图的省钱计划.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

时间限制: 1000ms 内存限制: 65536kB描述百度地图有自己的一套坐标系(你可以把它看作一个笛卡尔坐标系),在这套坐标系里,一个标准单位为1km。而在这坐标系上针对地理信息进行标注的数据,大多数时候是通过购买的方式完成的。为了节约数据更新的成本,数据组里的鑫哥想出了一个好主意自己测数据。鑫哥按照他的预想开始实验;在每组试验中,鑫哥选取了三个已经被准确标注在百度地图的坐标系里的移动运营商的基站作为信号接收点(这里可以准确的得到信号的接收时间信息)。当信号接收点附近的用户手机签到时,三个信号接收点就会先后接收到这个信号,并可以准确的知晓接收到信号的时间(将第一个信号点接收到信号的时间记为0秒时刻)。由此,我们就可以确定用户手机签到的位置的在地图的准确坐标了。现在已知以下数据:1.三个信号接收点在百度地图坐标系中的具体坐标(x1,y1), (x2,y2), (x3,y3);2.三个信号点得到用户发出的信号的时间t1, t2, t3(t1, t2, t3 0),单位s; t1, t2, t3至少有一个数为0;3.信号的转播速度C,单位m/s;请帮助鑫哥写个程序,计算下用户发出信号的位置在百度地图坐标系内的坐标(这个点是唯一的)。输入输入包含多组数据,每组数据格式如下:Cx1 y1 x2 y2 x3 y3t1 t2 t3最后一组数据为0,表示输入结束。输出针对每组测试数据,请先输出这个组的编号(第n组就是输出“Case n:”);然后换行输出信号发出点的坐标(x,y) 。x,y应该由空格分隔,并被舍入到小数点后第六位。样例输入10000 1 1 1 2 10 0.6 1.610000 0 0 1 1 00.4142135 0 010000 0 1 0 2 10 0.414213562373 110000 0 0 -1 0 10 0 110000 0 0 1 0 -10 1 010000 0 1 0 -1 00 1 010000 0 -1 0 1 00 0 11000 0 0 1 1 00 10 100样例输出Case 1:0.200000 1.000000Case 2:1.000000 1.000000Case 3:0.000000 1.000000Case 4:0.000000 -0.500000Case 5:0.000000 -0.500000Case 6:-0.500000 0.000000Case 7:-0.500000 0.000000Case 8:0.000000 0.000000AC Code (G+)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusingnamespacestd;doublex10, y10, t10;boolsolve(inti,intj,intk) doublex1, y1, x2, y2, t1, t2; x1=xj-xi; x2=xk-xi; y1=yj-yi; y2=yk-yi; t1=tj-ti; t2=tk-ti; doubleA1=x1*x1+y1*y1-t1*t1; doubleA2=x2*x2+y2*y2-t2*t2; doubleA=A1*y2-A2*y1, B=A1*x2-A2*x1, C=A1*t2-A2*t1; doublecita=atan2(B, A); doublesum=asin(-C/sqrt(A*A+B*B+1e-15); doublealpha=sum-cita; doubler; if(abs(A1)abs(A2) r=A1/(t1+x1*cos(alpha)+y1*sin(alpha)/2; else r=A2/(t2+x2*cos(alpha)+y2*sin(alpha)/2; if(rabs(A2) r=A1/(t1+x1*cos(alpha)+y1*sin(alpha)/2; else r=A2/(t2+x2*cos(alpha)+y2*sin(alpha)/2; printf(%.6f %.6fn, r*cos(alpha)+xi, r*sin(alpha)+yi);intmain() for(intdd=1;+dd) doublec; scanf(%lf,&c); c/=1000; if(abs(c)1e-6) break; scanf(%lf %lf %lf %lf %lf %lf, x, y, x+1, y+1, x+2, y+2); scanf(%lf %lf %lf, t, t+1, t+2); printf(Case %d:n, dd); t0*=c; t1*=c; t2*=c; if(solve(0,1,2) continue; return0;我:#include#include#include#include#include#include#includeusing namespace std;double x10, y10, t10;bool solve(int i, int j, int k) double x1, y1, x2, y2, t1, t2; x1 = xj -xi; x2 = xk -xi; y1 = yj -yi; y2 = yk -yi; t1 = tj -ti; t2 = tk -ti; double A1 = x1*x1 + y1*y1 - t1*t1; double A2 = x2*x2 + y2*y2 - t2*t2; double A = A1*y2-A2*y1, B = A1*x2-A2*x1, C = A1 * t2 - A2 * t1; double cita = atan2(B, A); double sum = asin(- C/sqrt(A*A+B*B+1e-15); double alpha = sum - cita; double r; if (abs(A1)abs(A2) r = A1/(t1 + x1 *cos(alpha) + y1 * sin(alpha)/2; else r = A2/(t2 + x2 *cos(alpha) + y2 * sin(alpha)/2; if (rabs(A2) r = A1/(t1 + x1 *cos(alpha) + y1 * sin(alpha)/2; else r = A2/(t2 + x2 *cos(alpha) + y2 * sin(alpha)/2; printf(%.6f %.6fn, r * cos(alpha) + xi, r * sin(alpha) + yi);return 1;int main() for (int dd = 1; ; + dd) double c; scanf(%lf, & c); c/=1000; if (abs(c) 1e-6) break; scanf(%lf %lf %l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论