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

OpenGL

开发平台:

Visual C++

  1. // jpleph.h
  2. //
  3. // Copyright (C) 2004, 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. //
  10. // Load JPL's DE200, DE405, and DE406 ephemerides and compute planet
  11. // positions.
  12. #ifndef _CELENGINE_JPLEPH_H_
  13. #define _CELENGINE_JPLEPH_H_
  14. #include <iostream>
  15. #include <vector>
  16. #include <celmath/vecmath.h>
  17. enum JPLEphemItem
  18. {
  19.     JPLEph_Mercury       =  0,
  20.     JPLEph_Venus         =  1,
  21.     JPLEph_EarthMoonBary =  2,
  22.     JPLEph_Mars          =  3,
  23.     JPLEph_Jupiter       =  4,
  24.     JPLEph_Saturn        =  5,
  25.     JPLEph_Uranus        =  6,
  26.     JPLEph_Neptune       =  7,
  27.     JPLEph_Pluto         =  8,
  28.     JPLEph_Moon          =  9,
  29.     JPLEph_Sun           = 10,
  30.     JPLEph_Earth         = 11,
  31.     JPLEph_SSB           = 12,
  32. };
  33. #define JPLEph_NItems 12
  34. struct JPLEphCoeffInfo
  35. {
  36.     unsigned int offset;
  37.     unsigned int nCoeffs;
  38.     unsigned int nGranules;
  39. };
  40. struct JPLEphRecord
  41. {
  42.     JPLEphRecord() : coeffs(NULL) {};
  43.     ~JPLEphRecord();
  44.     double t0;
  45.     double t1;
  46.     double* coeffs;
  47. };
  48. class JPLEphemeris
  49. {
  50. private:
  51.     JPLEphemeris();
  52. public:
  53.     ~JPLEphemeris();
  54.     Point3d getPlanetPosition(JPLEphemItem, double t) const;
  55.     static JPLEphemeris* load(std::istream&);
  56.     unsigned int getDENumber() const;
  57.     double getStartDate() const;
  58.     double getEndDate() const;
  59. private:
  60.     JPLEphCoeffInfo coeffInfo[JPLEph_NItems];
  61.     JPLEphCoeffInfo librationCoeffInfo;
  62.     double startDate;
  63.     double endDate;
  64.     double daysPerInterval;
  65.     double au;
  66.     double earthMoonMassRatio;
  67.     unsigned int DENum;       // ephemeris version
  68.     unsigned int recordSize;  // number of doubles per record
  69.     std::vector<JPLEphRecord> records;
  70. };
  71. #endif // _CELENGINE_JPLEPH_H_