题目大意:

给定半径6378km的球上的 多个地点 及其  经纬度

多个询问 给定三个地点 A B C

A与B的等距点在球上形成一个大圆

即球面上有一个到两点距离相等的大圆

且大圆所在平面垂直两点连线

求C点到该大圆的最近球面距离

1.特殊情况即A B为同一点 此时整个球面上的点都是等距点

则C到等距点的最近球面距离为0

2.设两点与球心组成一个平面S1 大圆与球面组成的平面S2

则S1与S2垂直 即两个平面相差90度

求出球心到C的向量cd与S1的夹角为ang度

则cd与S2的夹角则为|ang-90|度

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define mem(i,j) memset(i,j,sizeof(i))
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define dec(i,j,k) for(int i=j;i>=k;i--)
const int N=1e5+;
const double eps=1e-;
const double PI=acos(-1.0); int dcmp(double x) {
if(abs(x)<eps) return ;
else return x< ? -:;
}
struct P {
double x,y,z;
P(){}
P(double x,double y,double z):x(x),y(y),z(z){}
P operator -(const P& p)const { return P(x-p.x,y-p.y,z-p.z); }
double dot(const P& p) const { return x*p.x+y*p.y+z*p.z; }
bool operator ==(const P& p)const {
return dcmp(x-p.x)== && dcmp(y-p.y)== && dcmp(z-p.z)==;
}
}p[];
double Radian(double t) {
return t*PI/180.0;
}
double lenP(P p) {
return sqrt(p.dot(p));
}
double Angle(P a,P b) {
return acos(a.dot(b)/lenP(a)/lenP(b));
}
int tot;
map<string,int>id;
double R=6378.0; void ptf(string c,int res,string a,string b) {
cout<<c<<" is ";
if(res==-) cout<<"?";
else cout<<res;
cout<<" km off "<<a<<"/"<<b<<" equidistance.\n";
} int main()
{
ios::sync_with_stdio(false);
id.clear(); tot=; string s;
double la,lo;
while(cin>>s) {
if(s=="#") break;
id[s]=++tot;
cin>>la>>lo;
p[tot].x=R*cos(Radian(la))*sin(Radian(lo));
p[tot].y=R*cos(Radian(la))*cos(Radian(lo));
p[tot].z=R*sin(Radian(la));
} string A,B,C;
while(cin>>A) {
if(A=="#") break;
cin>>B>>C; int aid,bid,cid;
bool flag=; if(!id.count(A)) flag=; else aid=id[A];
if(!id.count(B)) flag=; else bid=id[B];
if(!id.count(C)) flag=; else cid=id[C]; double ans, ang;
if(flag) ans=-1.0;
else {
P a=p[aid], b=p[bid], c=p[cid];
if(a==b) ans=0.0;
else {
ang=Angle(a-b,c);
ang=abs(ang-PI/2.0);
ans=ang*R+0.5; // 弧长公式
}
}
ptf(C,(int)ans,A,B);
} return ;
}

POJ 2412 /// 空间几何 经纬度转三维坐标 角度转弧度 法向量的更多相关文章

  1. ACM1174_爆头解题思路_空间三维坐标求点到直线的距离

    /* 爆头 Description gameboy是一个CS高手,他最喜欢的就是扮演警察, 手持M4爆土匪的头.也许这里有人没玩过CS,有必 要介绍一下“爆头”这个术语:所谓爆头,就是子 弹直接命中对 ...

  2. OpenGL 的空间变换(上):矩阵在空间几何中的应用

    在使用 OpenGL 的应用程序中,当我们指定了模型的顶点后,顶点依次会变换到不同的 OpenGL 空间中,最后才会被显示到屏幕上.在变换的过程中,通过使用矩阵,我们更高效地来完成这些变换工作. 本篇 ...

  3. “为什么DirectX里表示三维坐标要建一个4*4的矩阵?”

    0x00 前言 首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 .因此,正如Milo Yip大神所说的这个标题事实上是存 ...

  4. OpenGL 获取当前屏幕坐标的三维坐标(gluUnProject使用例子 Qt)

    之前使用VS+glut实现了gluUnProject使用例子,用于渲染管道的逆过程,将屏幕坐标转换为opengl三维坐标,本文将尝试使用QT来实现. 代码如下:  main.cpp  12345678 ...

  5. MATLAB在三维坐标中显示图片 并 使得图片部分透明

    要画一个光路图,本来可以用proe,但是鼠标不好用,有些操作也忘了,用MATLAB画了个.下面是用到的图片. 但是三维坐标中显示彩色图片的目标没有搞定,做了个灰度图,然后用仿射程序将彩色图片贴到了二维 ...

  6. OpenGL 获取当前屏幕坐标对应的三维坐标

    转自原文 OpenGL 获取当前屏幕坐标对应的三维坐标,使用很简单glu库中的一个函数 #include <GL/glut.h> #include <stdlib.h> #in ...

  7. VTK根据三维坐标点集生成点云

    一个简单的利用VTK根据三维坐标点集生成点云的例子,仅供参考. 一.环境:vtk-8.1 & vs2013(需自行配置vtk的环境) 二.我所读取的三维坐标点集为txt格式文件,每个点的x,y ...

  8. vs中使用M_PI的问题及解决 角度转弧度&根据弧度计算圆周上点的坐标的方法

    M_PI 是一个宏定义,圆周率的定义           C/C++ code #define M_PI 3.14159265358979323846 此宏定义和编译器有关,TC中M_PI宏就定义在& ...

  9. 角度转弧度&根据弧度计算圆周上点的坐标的方法

    角度转弧度: #define AngleToRadian(angle) (M_PI/180.0f)*angle 以正东面为0度起点计算指定角度所对应的圆周上的点的坐标: float radian = ...

随机推荐

  1. 攻防世界--python-trade

    测试文件:https://adworld.xctf.org.cn/media/task/attachments/69c8f29912ae4f679d92a6cd36c33196.pyc 这里需要用到一 ...

  2. 初涉kafka

    前言: 今天终于搭建成功kafka环境,并创建了第一个topic,并生产.消费消息,如下图: 生产: 消费: 心情真的是好激动,大家都说搭建环境其实特别简单,但是我的学习却一直卡在搭建环境上面,不是虚 ...

  3. JSTL获取list的大小

    转自:https://blog.csdn.net/buster2014/article/details/45789647 JSTL获取list的大小,jstl获取list 的长度,EL表达式获取lis ...

  4. 295-Xilinx Kintex-7 X7K325T的半高PCIe x4双路万兆光纤收发卡

    Xilinx Kintex-7 X7K325T的半高PCIe x4双路万兆光纤收发卡 一.板卡概述       本板卡系我公司自主研发,采用Xilinx公司的XC7K325T-2FFG676I芯片作为 ...

  5. SOA架构是什么?

    https://blog.csdn.net/u013343616/article/details/79460398 SOA是什么?SOA全英文是Service-Oriented Architectur ...

  6. kill命令的几种信号

    1 HUP: hangup 2 INIT: 相当于 Ctrl + c 9 KILL 15 TERM: Terminate (kill 的默认信号) 18 CONT: Continue (从STOP信号 ...

  7. 【leetcode】1012. Complement of Base 10 Integer

    题目如下: Every non-negative integer N has a binary representation.  For example, 5 can be represented a ...

  8. css3的三大特性以及移动端说明

    css3的三大特性: 一.层叠性 所谓层叠性是指多种CSS样式的叠加. 是浏览器处理冲突的一个能力,如果一个属性通过两个相同选择器设置到同一个元素上,那么这个时候一个属性就会将另一个属性层叠掉 比如先 ...

  9. 使用idea搭建Spring boot+jsp的简单web项目

    大家好: 这是我的第一篇博客文章,简单介绍一下Spring boot + jsp 的搭建流程,希望给跟我一样新接触Spring boot的读者一点儿启发. 开发工具:jdk1.8   idea2017 ...

  10. 线程join方法demo-模拟叫号看病

    package cn.chapter4.test5; public class SicknessDemo { /** * 模拟叫号看病 * @param args * * 思路:把普通号看病写在主线程 ...