globe.c

来自「ULM大学200-2002年竞赛题」· C语言 代码 · 共 52 行

C
52
字号
// Problem   Global Roaming// Algorithm 3D-Geometry// Runtime   O(n)// Author    Marc Meister// Date      02.07.2001#include <fstream>#include <string>#include <cmath>using namespace std;typedef struct pos {  double x, y, z;} tPos;#define EarthR 6378.0ifstream in("globe.in");tPos polar2cartesian(double lat, double lon, double r) {  tPos p;  lat *= atan(1.0)/45.0;  lon *= atan(1.0)/45.0;  p.x = r * cos(lon) * cos(lat);  p.y = r * sin(lon) * cos(lat);  p.z = r * sin(lat);  return p;}int main() {  double lat, lon, r;  for (int kase = 1; ; kase++){    int n;    in >> n >> lat >> lon >> r;    if (!n)      break;    cout << "Test case " << kase << ":" << endl;    tPos p1 = polar2cartesian(lat, lon, r + EarthR);    for (int i=0; i<n; i++) {      string s;      in >> s >> lat >> lon;      tPos p2 = polar2cartesian(lat, lon, EarthR);      if ( (p1.x-p2.x)*p2.x + (p1.y-p2.y)*p2.y + (p1.z-p2.z)*p2.z > 0.0)        cout << s << endl;    }    cout << endl;  }  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?