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

OpenGL

开发平台:

Visual C++

  1. // readstars.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 <cmath>
  10. #include <iostream>
  11. #define MAX_STARS 120000
  12. #define PI 3.1415926535898
  13. #include "basictypes.h"
  14. #include "stellarclass.h"
  15. #include "star.h"
  16. int main(int argc, char *argv[])
  17. {
  18.     Star *stars = new Star[MAX_STARS];
  19.     int nStars = 0;
  20.     float brightest = 100000;
  21.     while (nStars < MAX_STARS) {
  22. uint32 catNo = 0;
  23. float RA = 0, dec = 0, parallax = 0;
  24. int16 appMag;
  25. uint16 stellarClass;
  26. cin.read((void *) &catNo, sizeof catNo);
  27. cin.read((void *) &RA, sizeof RA);
  28. cin.read((void *) &dec, sizeof dec);
  29. cin.read((void *) &parallax, sizeof parallax);
  30. cin.read((void *) &appMag, sizeof appMag);
  31. cin.read((void *) &stellarClass, sizeof stellarClass);
  32. if (!cin.good())
  33.     break;
  34. Star *star = &stars[nStars];
  35. // Compute distance based on parallax
  36. double distance = 3.26 / (parallax > 0.0 ? parallax / 1000.0 : 1e-6);
  37. // Convert from RA, dec spherical to cartesian coordinates
  38. double theta = RA / 24.0 * PI * 2;
  39. double phi = (1.0 - dec / 90.0) * PI / 2;
  40. double x = cos(theta) * sin(phi) * distance;
  41. double y = cos(phi) * distance;
  42. double z = sin(theta) * sin(phi) * distance;
  43. star->setPosition((float) x, (float) y, (float) z);
  44. // Use apparent magnitude and distance to determine the absolute
  45. // magnitude of the star.
  46. star->setAbsoluteMagnitude((float) (appMag / 256.0 + 5 -
  47.     5 * log10(distance / 3.26)));
  48. StellarClass sc((StellarClass::StarType) (stellarClass >> 12),
  49. (StellarClass::SpectralClass)(stellarClass >> 8 & 0xf),
  50. (unsigned int) (stellarClass >> 4 & 0xf),
  51. (StellarClass::LuminosityClass) (stellarClass & 0xf));
  52. star->setStellarClass(sc);
  53. star->setCatalogNumber(catNo);
  54. if (parallax > 0.0 && star->getAbsoluteMagnitude() < brightest)
  55.         {
  56.     brightest = star->getAbsoluteMagnitude();
  57.     cout << brightest << ' ' << sc << 'n';
  58. }
  59. nStars++;
  60.     }
  61.     cout << nStars << 'n';
  62.     cout << sizeof(StellarClass) << 'n';
  63.     cout << sizeof(stars[0]) << 'n';
  64. }