17 using namespace qtty::literals;
19 std::printf(
"=== siderust-cpp demo ===\n\n");
22 auto jd = JulianDate::from_utc({2026, 7, 15, 22, 0, 0});
23 std::printf(
"JD for 2026-07-15 22:00 UTC: %.6f\n", jd.value());
24 std::printf(
"Julian centuries since J2000: %.10f\n", jd.julian_centuries());
26 auto mjd = MJD::from_jd(jd);
27 std::printf(
"MJD: %.6f\n\n", mjd.value());
30 auto obs = ROQUE_DE_LOS_MUCHACHOS;
31 std::printf(
"Roque de los Muchachos: lon=%.4f lat=%.4f h=%.0f m\n\n",
32 obs.lon.value(), obs.lat.value(), obs.height.value());
35 qtty::Radian sun_alt = sun::altitude_at(obs, mjd);
36 std::printf(
"Sun altitude: %.4f rad (%.2f deg)\n\n",
37 sun_alt.value(), sun_alt.to<qtty::Degree>().value());
40 const auto& vega = VEGA;
41 std::printf(
"Star: %s, d=%.2f ly, L=%.2f Lsun\n",
42 vega.name().c_str(), vega.distance_ly(),
43 vega.luminosity_solar());
46 qtty::Radian star_alt = star_altitude::altitude_at(vega, obs, mjd);
47 std::printf(
"Vega altitude: %.4f rad (%.2f deg)\n\n",
48 star_alt.value(), star_alt.to<qtty::Degree>().value());
53 std::printf(
"--- Typed Coordinate API ---\n\n");
60 std::printf(
"Typed ICRS (%.4f, %.4f) -> EclMeanJ2000 (%.4f, %.4f)\n",
61 vega_icrs.
ra().value(), vega_icrs.
dec().value(),
62 ecl.lon().value(), ecl.lat().value());
66 std::printf(
"Typed ICRS -> EquatorialJ2000 (%.4f, %.4f)\n",
67 eq_j2000.ra().value(), eq_j2000.dec().value());
71 std::printf(
"Typed Horizontal: az=%.4f alt=%.4f deg\n\n",
72 hor.az().value(), hor.al().value());
75 auto back = ecl.to_frame<
ICRS>(jd);
76 std::printf(
"Roundtrip: (%.6f, %.6f) -> (%.6f, %.6f) -> (%.6f, %.6f)\n",
77 vega_icrs.
ra().value(), vega_icrs.
dec().value(),
78 ecl.lon().value(), ecl.lat().value(),
79 back.ra().value(), back.dec().value());
82 qtty::Radian ra_rad = vega_icrs.
ra().to<qtty::Radian>();
83 std::printf(
"Vega RA: %.6f deg = %.6f rad\n\n", vega_icrs.
ra().value(), ra_rad.value());
86 std::printf(
"--- Typed Ephemeris ---\n\n");
88 auto earth = ephemeris::earth_heliocentric(jd);
89 std::printf(
"Earth heliocentric (typed AU): (%.8f, %.8f, %.8f)\n",
90 earth.x().value(), earth.y().value(), earth.z().value());
93 qtty::Kilometer x_km = earth.comp_x.to<qtty::Kilometer>();
94 qtty::Kilometer y_km = earth.comp_y.to<qtty::Kilometer>();
95 std::printf(
"Earth heliocentric (km): (%.2f, %.2f, ...)\n\n",
96 x_km.value(), y_km.value());
98 auto moon = ephemeris::moon_geocentric(jd);
99 std::printf(
"Moon geocentric (typed km): (%.2f, %.2f, %.2f)\n",
100 moon.x().value(), moon.y().value(), moon.z().value());
101 auto moon_r = std::sqrt(moon.x().value() * moon.x().value() + moon.y().value() * moon.y().value() + moon.z().value() * moon.z().value());
102 std::printf(
"Moon distance: %.2f km\n\n", moon_r);
105 auto mars_data = MARS;
106 std::printf(
"Mars: mass=%.4e kg, radius=%.2f km\n",
107 mars_data.mass_kg, mars_data.radius_km);
108 std::printf(
" orbit: a=%.6f AU, e=%.6f\n\n",
109 mars_data.orbit.semi_major_axis_au,
110 mars_data.orbit.eccentricity);
113 auto night_start = mjd;
114 auto night_end = mjd + 1.0;
115 auto nights = sun::below_threshold(obs, night_start, night_end, -18.0_deg);
116 std::printf(
"Astronomical night periods (sun < -18 deg):\n");
117 for (
auto& p : nights) {
118 std::printf(
" MJD %.6f – %.6f (%.2f hours)\n",
119 p.start_mjd(), p.end_mjd(),
120 p.duration_days() * 24.0);
123 std::printf(
"\nDone.\n");