poj2354Titanic(两点的球面距离)

链接

球面距离计算公式:d(x1,y1,x2,y2)=r*arccos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y1-y2))

x1,y1是纬度\经度的弧度单位,r为地球半径

把有用的信息从恶心的字符串中提取出来,然后套公式,再处理下恶心的精度,得出的距离需要四舍五入。

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 #include<queue>
 9 #include<set>
10 using namespace std;
11 #define N 100000
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 const double r = 6875/2.0;
18 char s[110];
19 int dcmp(double x)
20 {
21     if(fabs(x)<eps) return 0;
22     return x<0?-1:1;
23 }
24 void solve(double x1,double y1,double x2,double y2)
25 {
26     double ans =  r*acos(sin(x1)*sin(x2)+
27                    cos(x1)*cos(x2)*cos(y1-y2));
28
29     printf("The distance to the iceberg: %.2lf miles.\n",ans);
30     if(dcmp(ans-100+0.005)<0)
31     puts("DANGER!");
32 }
33 int main()
34 {
35     double d1,d2,d3,d4;
36     int a,b,c,i;
37     char dir[10];
38     for(i = 0; i < 9 ; i++)
39     scanf("%s",s);
40     scanf("%s",s);
41     sscanf(s,"%d^%d‘%d‘‘",&a,&b,&c);
42     //printf("%d %d %d\n",a,b,c);
43     d1 = a+b/60.0+c/3600.0;
44     scanf("%s",dir);
45     if(dir[0]==‘S‘)
46     d1=-d1;
47     scanf("%s",s);
48
49     scanf("%s",s);
50     sscanf(s,"%d^%d‘%d‘‘",&a,&b,&c);
51     //printf("%d %d %d\n",a,b,c);
52     d2 = a+b/60.0+c/3600.0;
53     scanf("%s",dir);
54     if(dir[0]==‘W‘)
55     d2=-d2;
56
57     for(i =0 ; i < 5 ; i++) scanf("%s",s);
58     scanf("%s",s);
59     sscanf(s,"%d^%d‘%d‘‘",&a,&b,&c);
60     //printf("%d %d %d\n",a,b,c);
61     d3 = a+b/60.0+c/3600.0;
62     scanf("%s",dir);
63     if(dir[0]==‘S‘)
64     d3=-d3;
65
66     scanf("%s",s);
67
68     scanf("%s",s);
69     sscanf(s,"%d^%d‘%d‘‘",&a,&b,&c);
70     //printf("%d %d %d\n",a,b,c);
71     d4 = a+b/60.0+c/3600.0;
72     scanf("%s",dir);
73     if(dir[0]==‘W‘)
74     d4=-d4;
75     scanf("%s",s);
76
77     solve(d1*pi/180,d2*pi/180,d3*pi/180,d4*pi/180);
78     return 0;
79 }

poj2354Titanic(两点的球面距离)

时间: 2024-08-24 17:13:32

poj2354Titanic(两点的球面距离)的相关文章

UVA 11817 Tunnelling the Earth --球面距离公式

题意: 给出两点的经纬度,求两点的球面距离与直线距离之差. 解法: 我们先算出球面距离,然后可以根据球面距离算出直线距离. 球面距离公式: R*acos(sin(W1)*sin(W2)+cos(W1)*cos(W2)*cos(J1-J2));   ( W1,W2 为两点的纬度值,J1,J2为两点的经度值 ) 推导过程就不写了,网上可以查到很明确的推导过程. 然后算出了球面距离,其实就是一段弧,根据弧长求弦长: 代码: #include <iostream> #include <cstdi

Android 两点距离的计算方法

最近做项目需要计算用户和商家之间的距离,并要求在Listview中显示具体距离.想了一下大致思路,首先是拿到当前用户的经纬度,在拿到具体某个商家的经纬度(服务端商家的经纬度已提供),根据用户和商家的经纬度来计算当前用户和商家的实际距离.就研究了一下具体的实现方法,计算两点距离一般有两种实现方式: 一种是使用勾股定理计算: 一种是计算两点之间的球面距离: 两种计算方式我做了一下比较,当两点的距离较近时使用两种方式计算的结果基本一致,但是当两点的距离比较远时,计算的结果就会相差甚远,比较发现两点之间

地理空间距离计算优化(转)

原文:http://tech.meituan.com/lucene-distance.html 1 地理空间距离计算面临的挑战 打开美团app,不管是筛选团购还是筛选商家,默认的排序项都是“离我最近”或者“智能排序”(如下图所示). 不管是“离我最近”还是“智能排序”,都涉及到计算用户位置与各个团购单子或者商家的距离(注:在智能排序中距离作为一个重要的参数参与排序打分).以筛选商家为例,北京地区有5~6w个POI(本文将商家称之为POI),当用户进入商家页,请求北京全城+所有品类+离我最近/智能

地理空间距离计算及优化(根据两个点经纬度计算距离)

1.地理空间距离计算面临的挑战 打开美团app,不管是筛选团购还是筛选商家,默认的排序项都是"离我最近"或者"智能排序"(如下图所示). 不管是"离我最近"还是"智能排序",都涉及到计算用户位置与各个团购单子或者商家的距离(注:在智能排序中距离作为一个重要的参数参与排序打分).以筛选商家为例,北京地区有5~6w个POI(本文将商家称之为POI),当用户进入商家页,请求北京全城+所有品类+离我最近/智能排序时,我们筛选服务需要计

地理空间距离计算优化

#1 地理空间距离计算面临的挑战 打开美团app,不管是筛选团购还是筛选商家,默认的排序项都是“离我最近”或者“智能排序”(如下图所示). 手机app示意 不管是“离我最近”还是“智能排序”,都涉及到计算用户位置与各个团购单子或者商家的距离(注:在智能排序中距离作为一个重要的参数参与排序打分).以筛选商家为例,北京地区有5~6w个POI(本文将商家称之为POI),当用户进入商家页,请求北京全城+所有品类+离我最近/智能排序时,我们筛选服务需要计算一遍用户位置与北京全城所有POI的距离. 这种大量

Geohash 算法学习

Geohash 算法: 这是一套纬度/经度地理编码算法,把纬度/经度编码成base32位的字符串.这种编码和纬度/经度不是唯一对应,其实是一个纬度/经度区间.算法有一个精度概念,精度越高,字符串越长,所表示的区间越小.可以编码后的字符串想象成一个格子,里面存放一些纬度/经度值.格子趋近很小的时候,只能存放一纬度/经度值,那么编码和纬度/经度就是唯一对应的关系.但是这个不是重点,这套算法目的就是把纬度/经度编码成近似值,通过近似值搜索,就能很高效的缩小范围,然后再从小范围里查找精确值. 例如,坐标

地理空间距离计算及优化(依据两个点经纬度计算距离)

1.地理空间距离计算面临的挑战 打开美团app.无论是筛选团购还是筛选商家,默认的排序项都是"离我近期"或者"智能排序"(例如以下图所看到的). 无论是"离我近期"还是"智能排序".都涉及到计算用户位置与各个团购单子或者商家的距离(注:在智能排序中距离作为一个重要的參数參与排序打分).以筛选商家为例.北京地区有5~6w个POI(本文将商家称之为POI),当用户进入商家页,请求北京全城+全部品类+离我近期/智能排序时.我们筛选服

立体几何初步--立体几何体

空间几何体 面 棱 顶点 平面一般用 α.β.γ... 来表示 点动成线,线动成面 直线的平行移动,形成平面或曲面,直线绕定点转动,形成锥面 棱柱.棱锥和棱台的结构特征 多面体 多面体是由若干个平面多边形围成的几何体 多面体的面:围成多面体的各个多边形叫做多面体的面 多面体的棱:相邻两个面的公共边 多面体的顶点:棱和棱的公共点 连结在同一个面上的两个顶点的线段叫做多面体对角线 凸多面体:一个多面体的任意一个面延展为平面,其余各面都在这个平面的同一侧 截面:一个几何体和一个平面相交所得到的平面图形

PHP实现搜索地理位置及计算两点地理位置间距离的实例

地理位置搜寻LBS,存储每个地点的经纬度坐标,搜寻附近的地点,建立地理位置索引可提高查询效率.mongodb地理位置索引,2d和2dsphere,对应平面和球面. 1.创建lbs集合存放地点坐标 use lbs; db.lbs.insert( { loc:{ type: "Point", coordinates: [113.332264, 23.156206] }, name: "广州东站" } ) db.lbs.insert( { loc:{ type: &quo