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

OpenGL

开发平台:

Visual C++

  1. // stellarclass.h
  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. #ifndef _STELLARCLASS_H_
  10. #define _STELLARCLASS_H_
  11. #include <iostream>
  12. #include <string>
  13. #include <celutil/basictypes.h>
  14. #include <celutil/color.h>
  15. class StellarClass
  16. {
  17. public:
  18.     enum StarType
  19.     {
  20. NormalStar     = 0,
  21. WhiteDwarf     = 1,
  22. NeutronStar    = 2,
  23.         BlackHole      = 3,
  24.     };
  25.     enum SpectralClass
  26.     {
  27. Spectral_O     = 0,
  28. Spectral_B     = 1,
  29. Spectral_A     = 2,
  30. Spectral_F     = 3,
  31. Spectral_G     = 4,
  32. Spectral_K     = 5,
  33. Spectral_M     = 6,
  34. Spectral_R     = 7, // superceded by class C
  35. Spectral_S     = 8,
  36. Spectral_N     = 9, // superceded by class C
  37. Spectral_WC    = 10,
  38. Spectral_WN    = 11,
  39.         Spectral_Unknown = 12,
  40.         Spectral_L     = 13,
  41.         Spectral_T     = 14,
  42.         Spectral_C     = 15,
  43.         Spectral_DA    = 16, // white dwarf A (Balmer lines, no He I or metals)
  44.         Spectral_DB    = 17, // white dwarf B (He I lines, no H or metals)
  45.         Spectral_DC    = 18, // white dwarf C, continuous spectrum
  46.         Spectral_DO    = 19, // white dwarf O, He II strong, He I or H
  47.         Spectral_DQ    = 20, // white dwarf Q, carbon features
  48.         Spectral_DZ    = 21, // white dwarf Z, metal lines only, no H or He
  49.         Spectral_D     = 22, // generic white dwarf, no additional data
  50.         Spectral_DX    = 23,
  51.         Spectral_Count = 24,
  52.     };
  53.     enum
  54.     {
  55.         FirstWDClass = 16,
  56.         WDClassCount = 8,
  57.         SubclassCount = 11,
  58.         NormalClassCount = 16,
  59.     };
  60.     enum LuminosityClass
  61.     {
  62. Lum_Ia0     = 0,
  63. Lum_Ia      = 1,
  64. Lum_Ib      = 2,
  65. Lum_II      = 3,
  66. Lum_III     = 4,
  67. Lum_IV      = 5,
  68. Lum_V       = 6,
  69. Lum_VI      = 7,
  70.         Lum_Unknown = 8,
  71.         Lum_Count   = 9,
  72.     };
  73.     enum
  74.     {
  75.         Subclass_Unknown = 10
  76.     };
  77.     inline StellarClass();
  78.     inline StellarClass(StarType,
  79. SpectralClass,
  80. unsigned int,
  81. LuminosityClass);
  82.     inline StarType getStarType() const;
  83.     inline SpectralClass getSpectralClass() const;
  84.     inline unsigned int getSubclass() const;
  85.     inline LuminosityClass getLuminosityClass() const;
  86.     Color getApparentColor() const;
  87.     Color getApparentColor(StellarClass::SpectralClass sc) const;
  88.     char* str(char* buf, unsigned int buflen) const;
  89.     std::string str() const;
  90.     static StellarClass parse(const std::string&);
  91.     friend bool operator<(const StellarClass& sc0, const StellarClass& sc1);
  92.     uint16 pack() const;
  93.     bool unpack(uint16);
  94. private:
  95.     StarType starType;
  96.     SpectralClass specClass;
  97.     LuminosityClass lumClass;
  98.     unsigned int subclass;
  99. };
  100. std::ostream& operator<<(std::ostream& s, const StellarClass& sc);
  101. // A rough ordering of stellar classes, from 'early' to 'late' . . .
  102. // Useful for organizing a list of stars by spectral class.
  103. bool operator<(const StellarClass& sc0, const StellarClass& sc1);
  104. StellarClass::StellarClass(StarType t,
  105.    SpectralClass sc,
  106.    unsigned int ssub,
  107.    LuminosityClass lum) :
  108.     starType(t),
  109.     specClass(sc),
  110.     lumClass(lum),
  111.     subclass(ssub)
  112. {
  113. }
  114. StellarClass::StellarClass() :
  115.     starType(NormalStar),
  116.     specClass(Spectral_Unknown),
  117.     lumClass(Lum_Unknown),
  118.     subclass(Subclass_Unknown)
  119. {
  120.     
  121. }
  122. StellarClass::StarType StellarClass::getStarType() const
  123. {
  124.     return starType;
  125. }
  126. StellarClass::SpectralClass StellarClass::getSpectralClass() const
  127. {
  128.     return specClass;
  129. }
  130. unsigned int StellarClass::getSubclass() const
  131. {
  132.     return subclass;
  133. }
  134. StellarClass::LuminosityClass StellarClass::getLuminosityClass() const
  135. {
  136.     return lumClass;
  137. }
  138. #endif // _STELLARCLASS_H_