constellation.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:6k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // constellation.cpp
  2. //
  3. // Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #include <iostream>
  10. #include <celutil/util.h>
  11. #include "celestia.h"
  12. #include "constellation.h"
  13. using namespace std;
  14. struct Constellation_s {
  15.     const char *name;
  16.     const char *gen;
  17.     const char *abbr;
  18. };
  19. static struct Constellation_s constellationInfo[] = {
  20.     { "Aries", "Arietis", "Ari" },
  21.     { "Taurus", "Tauri", "Tau" },
  22.     { "Gemini", "Geminorum", "Gem" },
  23.     { "Cancer", "Cancri", "Cnc" },
  24.     { "Leo", "Leonis", "Leo" },
  25.     { "Virgo", "Virginis", "Vir" },
  26.     { "Libra", "Librae", "Lib" },
  27.     { "Scorpius", "Scorpii", "Sco" },
  28.     { "Sagittarius", "Sagittarii", "Sgr" },
  29.     { "Capricornus", "Capricorni", "Cap" },
  30.     { "Aquarius", "Aquarii", "Aqr" },
  31.     { "Pisces", "Piscium", "Psc" },
  32.     { "Ursa Major", "Ursae Majoris", "UMa" },
  33.     { "Ursa Minor", "Ursae Minoris", "UMi" },
  34.     { "Bootes", "Bootis", "Boo" },
  35.     { "Orion", "Orionis", "Ori" },
  36.     { "Canis Major", "Canis Majoris", "CMa" },
  37.     { "Canis Minor", "Canis Minoris", "CMi" },
  38.     { "Lepus", "Leporis", "Lep" },
  39.     { "Perseus", "Persei", "Per" },
  40.     { "Andromeda", "Andromedae", "And" },
  41.     { "Cassiopeia", "Cassiopeiae", "Cas" },
  42.     { "Cepheus", "Cephei", "Cep" },
  43.     { "Cetus", "Ceti", "Cet" },
  44.     { "Pegasus", "Pegasi", "Peg" },
  45.     { "Carina", "Carinae", "Car" },
  46.     { "Puppis", "Puppis", "Pup" },
  47.     { "Vela", "Velorum", "Vel" },
  48.     { "Hercules", "Herculis", "Her" },
  49.     { "Hydra", "Hydrae", "Hya" },
  50.     { "Centaurus", "Centauri", "Cen" },
  51.     { "Lupus", "Lupi", "Lup" },
  52.     { "Ara", "Arae", "Ara" },
  53.     { "Ophiuchus", "Ophiuchi", "Oph" },
  54.     { "Serpens", "Serpentis", "Ser" },
  55.     { "Aquila", "Aquilae", "Aql" },
  56.     { "Auriga", "Aurigae", "Aur" },
  57.     { "Corona Australis", "Coronae Australis", "CrA" },
  58.     { "Corona Borealis", "Coronae Borealis", "CrB" },
  59.     { "Corvus", "Corvi", "Crv" },
  60.     { "Crater", "Crateris", "Crt" },
  61.     { "Cygnus", "Cygni", "Cyg" },
  62.     { "Delphinus", "Delphini", "Del" },
  63.     { "Draco", "Draconis", "Dra" },
  64.     { "Equuleus", "Equulei", "Equ" },
  65.     { "Eridanus", "Eridani", "Eri" },
  66.     { "Lyra", "Lyrae", "Lyr" },
  67.     { "Piscis Austrinus", "Piscis Austrini", "PsA" },
  68.     { "Sagitta", "Sagittae", "Sge" },
  69.     { "Triangulum", "Trianguli", "Tri" },
  70.     { "Antlia", "Antliae", "Ant" },
  71.     { "Apus", "Apodis", "Aps" },
  72.     { "Caelum", "Caeli", "Cae" },
  73.     { "Camelopardalis", "Camelopardalis", "Cam" },
  74.     { "Canes Venatici", "Canum Venaticorum", "CVn" },
  75.     { "Chamaeleon", "Chamaeleontis", "Cha" },
  76.     { "Circinus", "Circini", "Cir" },
  77.     { "Columba", "Columbae", "Col" },
  78.     { "Coma Berenices", "Comae Berenices", "Com" },
  79.     { "Crux", "Crucis", "Cru" },
  80.     { "Dorado", "Doradus", "Dor" },
  81.     { "Fornax", "Fornacis", "For" },
  82.     { "Grus", "Gruis", "Gru" },
  83.     { "Horologium", "Horologii", "Hor" },
  84.     { "Hydrus", "Hydri", "Hyi" },
  85.     { "Indus", "Indi", "Ind" },
  86.     { "Lacerta", "Lacertae", "Lac" },
  87.     { "Leo Minor", "Leonis Minoris", "LMi" },
  88.     { "Lynx", "Lyncis", "Lyn" },
  89.     { "Microscopium", "Microscopii", "Mic" },
  90.     { "Monoceros", "Monocerotis", "Mon" },
  91.     { "Mensa", "Mensae", "Men" },
  92.     { "Musca", "Muscae", "Mus" },
  93.     { "Norma", "Normae", "Nor" },
  94.     { "Octans", "Octantis", "Oct" },
  95.     { "Pavo", "Pavonis", "Pav" },
  96.     { "Phoenix", "Phoenicis", "Phe" },
  97.     { "Pictor", "Pictoris", "Pic" },
  98.     { "Pyxis", "Pyxidis", "Pyx" },
  99.     { "Reticulum", "Reticuli", "Ret" },
  100.     { "Sculptor", "Sculptoris", "Scl" },
  101.     { "Scutum", "Scuti", "Sct" },
  102.     { "Sextans", "Sextantis", "Sex" },
  103.     { "Telescopium", "Telescopii", "Tel" },
  104.     { "Triangulum Australe", "Trianguli Australis", "TrA" },
  105.     { "Tucana", "Tucanae", "Tuc" },
  106.     { "Volans", "Volantis", "Vol" },
  107.     { "Vulpecula", "Vulpeculae", "Vul" }
  108. };
  109. static Constellation **constellations = NULL;
  110. Constellation::Constellation(const char *_name, const char *_genitive, const char *_abbrev)
  111. {
  112.     name = string(_name);
  113.     genitive = string(_genitive);
  114.     abbrev = string(_abbrev);
  115. }
  116. Constellation* Constellation::getConstellation(unsigned int n)
  117. {
  118.     if (constellations == NULL)
  119. initialize();
  120.     if (constellations == NULL ||
  121. n >= sizeof(constellationInfo) / sizeof(constellationInfo[0]))
  122. return NULL;
  123.     else
  124. return constellations[n];
  125. }
  126. Constellation* Constellation::getConstellation(const string& name)
  127. {
  128.     if (constellations == NULL)
  129. initialize();
  130.     for (unsigned int i = 0;
  131.          i < sizeof(constellationInfo) / sizeof(constellationInfo[0]);
  132.          i++)
  133.     {
  134.         if (compareIgnoringCase(name, constellationInfo[i].abbr) == 0 ||
  135.             compareIgnoringCase(name, constellationInfo[i].gen) == 0 ||
  136.             compareIgnoringCase(name, constellationInfo[i].name) == 0)
  137.         {
  138.             return constellations[i];
  139.         }
  140.     }
  141.     return NULL;
  142. }
  143. string Constellation::getName()
  144. {
  145.     return name;
  146. }
  147. string Constellation::getGenitive()
  148. {
  149.     return genitive;
  150. }
  151. string Constellation::getAbbreviation()
  152. {
  153.     return abbrev;
  154. }
  155. void Constellation::initialize()
  156. {
  157.     int nConstellations = sizeof(constellationInfo) / sizeof(constellationInfo[0]);
  158.     constellations = new Constellation* [nConstellations];
  159.     if (constellations != NULL)
  160.     {
  161. for (int i = 0; i < nConstellations; i++)
  162.         {
  163.     constellations[i] = new Constellation(constellationInfo[i].name,
  164.   constellationInfo[i].gen,
  165.   constellationInfo[i].abbr);
  166. }
  167.     }
  168. }