整理的算法模板合集: ACM模板


题目大意:
以经纬度形式给出地球(当作一个球)上两个点,求这类的最短弧线距离和两点直线距离之差(四舍五入),假设地球半径为:6371009米

照着训练指南上的模板打就好。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#include<iostream>using namespace std;
typedef long long ll;
const int N = 50007, M = 500007, INF = 0x3f3f3f3f;
const double inf = 1e100;
const double eps = 1e-8;
int sgn(double d)
{if(fabs(d) < eps)return 0;if(d < 0)return 1;return -1;
}int dcmp(double x, double y)
{if(fabs(x - y) < eps)return 0;if(x > y)return 1;return -1;
}struct Point
{double x, y;Point(double x = 0, double y = 0):x(x), y(y) { }
};struct Point_3D
{double x, y, z;Point_3D(double x = 0, double y = 0, double z = 0):x(x), y(y), z(z){ }
};const int R = 6371009;double torad(double deg)//角度转弧度
{return deg / 180 * acos(-1);
}
//经纬度(角度)转化为空间坐标
void get_coord(double lat, double lng, double &x, double &y, double &z)
{lat = torad(lat);lng = torad(lng);x = R * cos(lat) * cos(lng);y = R * cos(lat) * sin(lng);z = R * sin(lat);
}
//就离谱,这里没有加double竟然不报错,导致答案小了1 ???
double get_dist_3D(Point_3D A, Point_3D B)
{double fx = A.x - B.x;double fy = A.y - B.y;double fz = A.z - B.z;return sqrt(fx * fx + fy * fy + fz * fz);
}
int t;
int main()
{scanf("%d", &t);while(t -- ){Point A, B;Point_3D a, b;scanf("%lf%lf%lf%lf", &A.x, &A.y, &B.x, &B.y);get_coord(A.x, A.y, a.x, a.y, a.z);get_coord(B.x, B.y, b.x, b.y, b.z);double distance = get_dist_3D(a, b);double hu = 2.0 * asin(distance / 2.0 / R) *R;printf("%.f\n", hu - distance);//可以直接四舍五入//printf("%d\n", (int)(hu - distance + 0.5));}return 0;
}

UVA11817 Tunnelling the Earth(计算几何、经纬度转空间坐标、球面距离)相关推荐

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

    题意: 给出两点的经纬度,求两点的球面距离与直线距离之差. 解法: 我们先算出球面距离,然后可以根据球面距离算出直线距离. 球面距离公式: R*acos(sin(W1)*sin(W2)+cos(W1) ...

  2. 二维几何基础大合集!《计算几何全家桶(一)》(基础运算、点、线、多边形、圆、网格)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 目录 1.基本运算 1.1 判断正负函数(sgn) 1.2 点积(数量积.内积)(Dot) 1.3 向量积 ...

  3. 怎么用Python计算地球上任意两个用经纬度表示的点的弧面距离?

    这是来自知乎上的问题.问我的时候,恰好我在写一个和向量计算相关的文章,于是灵光乍现,顺手写了这样一个答案.该算法未经严格验证,请谨慎参考.具体思路如下. 将两个点的经纬度换算成空间坐标: 计算地心与两 ...

  4. 第7期:计算几何(持续更新中......)

    // 2022/01/22更新 更新内容主要为算法竞赛入门经典--训练指南(升级版)(刘汝佳.陈锋编著)第4章几何问题 1 二维几何基础 在平面坐标系下,向量和点一样,也用两个数x,y表示.第6章介绍 ...

  5. 我的所有优质博客全部开源啦(我自己原创的《ACM模板》《算法全家桶》《算法竞赛中的初等数论》 PDF免费下载)

    你好呀ヾ(≧▽≦*)o 我是繁凡さん 这两年来我写了很多长篇文章,主要涉及数据结构,算法,程序设计竞赛,数学,计算几何等方面的内容: <数据结构>C语言版(清华严蔚敏考研版) 全书知识梳理 ...

  6. ACM模板(满注释模板!)

    转自:https://fanfansann.blog.csdn.net/article/details/105493218 目录 F o r e w o r d ForewordForeword T ...

  7. GPS定位基本原理浅析

    位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机.掌上电脑等)的标配.而定位导航技术中,目前精度最高.应用最广泛的,自然非GPS莫属了.网络上介绍GPS原理的专业资料很多,而本文 ...

  8. GPS 入门 8 —— GPS定位基本原理浅析

    转自http://www.cnblogs.com/magicboy110/archive/2010/12/09/1901669.html    位置服务已经成为越来越热的一门技术,也将成为以后所有移动 ...

  9. GPS及AGPS定位基本原理解析

    最近看到咱们国内的的导航:北斗导航已经完全部署完了么,然后就去查找资料了解了一下导航这个玩意,最后发现其实不管什么导航其实都差不多,只是用的卫星不一样,如果用GPS导航可能就是使用美国那边发射的卫星, ...

最新文章

  1. 一、Axis2 WebService开发准备工作
  2. quick cocos2d x 手机(Android端)启动过程学习
  3. 多元函数概念思维导图_高等数学 多元函数微分学 知识技巧思维导图 [21考研上岸之旅]...
  4. 学习使用新浪接口随笔(一)
  5. 将域名绑定到ip上,并实现访问不同二级子域名对应不同目录
  6. 【iOS开发-74】解决方式:Xcode6下利用preference保存数据,终于的plist文件在哪里?...
  7. 力扣45. 跳跃游戏 II(JavaScript)
  8. js判断是否为ie浏览器
  9. 1.4.1bat脚本命令COPY 拷贝 复制到
  10. 三十、动名词短语 2
  11. 色差仪确保番茄酱色彩一致性
  12. 光环效应引发的认知误区
  13. 【02】Java进阶:09-冒泡排序、选择排序、二分查找、异常、异常的产生和处理、自定义异常、多线程
  14. 骑士CMS4.1.23本地包含漏洞
  15. uos系统不激活能用吗_uos如何激活
  16. 两个相离圆上各取一点P、Q,求线段PQ中点M的轨迹。
  17. 计算机基础知识在教学的应用,计算机基础知识中项目教学法的应用
  18. RedisBloom 插件布隆过滤器,布谷鸟过滤器,Count-Min Sketch,TOPK使用详解
  19. 柯基数据:先进的知识图谱技术,构建行业知识图谱,助企业打通内部信息孤岛,链接海量数据 |百万人学AI评选
  20. 忍不住推荐给你的4个导航网站

热门文章

  1. 高翔Slambook第七讲代码解读(特征点提取)
  2. SpringMVC,针对不支持PUT、DELETE提交的游览器处理方式
  3. 1067. 试密码(20)
  4. iOS 导航色差问题解决方案
  5. vim设置窗体大小的环境变量
  6. RequireJs的使用和快速理解
  7. 糟糕的css用法 1
  8. 数组--将两个有序数组a,b合并成新的有序数组c
  9. 搭建高可用mongodb集群(二)—— 副本集
  10. sublime几个插件