// readstars.cpp // // Copyright (C) 2001, Chris Laurel // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. #include #include #define MAX_STARS 120000 #define PI 3.1415926535898 #include "stellarclass.h" #include "star.h" int main(int argc, char *argv[]) { Star *stars = new Star[MAX_STARS]; int nStars = 0; float brightest = 100000; while (nStars < MAX_STARS) { uint32_t catNo = 0; float RA = 0, dec = 0, parallax = 0; int16_t appMag; uint16_t stellarClass; cin.read((void *) &catNo, sizeof catNo); cin.read((void *) &RA, sizeof RA); cin.read((void *) &dec, sizeof dec); cin.read((void *) ¶llax, sizeof parallax); cin.read((void *) &appMag, sizeof appMag); cin.read((void *) &stellarClass, sizeof stellarClass); if (!cin.good()) break; Star *star = &stars[nStars]; // Compute distance based on parallax double distance = 3.26 / (parallax > 0.0 ? parallax / 1000.0 : 1e-6); // Convert from RA, dec spherical to cartesian coordinates double theta = RA / 24.0 * PI * 2; double phi = (1.0 - dec / 90.0) * PI / 2; double x = cos(theta) * sin(phi) * distance; double y = cos(phi) * distance; double z = sin(theta) * sin(phi) * distance; star->setPosition((float) x, (float) y, (float) z); // Use apparent magnitude and distance to determine the absolute // magnitude of the star. star->setAbsoluteMagnitude((float) (appMag / 256.0 + 5 - 5 * log10(distance / 3.26))); StellarClass sc((StellarClass::StarType) (stellarClass >> 12), (StellarClass::SpectralClass)(stellarClass >> 8 & 0xf), (unsigned int) (stellarClass >> 4 & 0xf), (StellarClass::LuminosityClass) (stellarClass & 0xf)); star->setStellarClass(sc); star->setCatalogNumber(catNo); if (parallax > 0.0 && star->getAbsoluteMagnitude() < brightest) { brightest = star->getAbsoluteMagnitude(); cout << brightest << ' ' << sc << '\n'; } nStars++; } cout << nStars << '\n'; cout << sizeof(StellarClass) << '\n'; cout << sizeof(stars[0]) << '\n'; }