76 std::vector<AzimuthCrossingEvent> result;
77 result.reserve(count);
78 for (uintptr_t i = 0; i < count; ++i) {
81 siderust_azimuth_crossings_free(ptr, count);
87 std::vector<AzimuthExtremum> result;
88 result.reserve(count);
89 for (uintptr_t i = 0; i < count; ++i) {
92 siderust_azimuth_extrema_free(ptr, count);
113 return qtty::Degree(out);
121 qtty::Degree bearing,
123 siderust_azimuth_crossing_event_t *ptr =
nullptr;
126 window.c_inner(), bearing.value(), opts.to_c(), &ptr,
128 "sun::azimuth_crossings");
138 siderust_azimuth_extremum_t *ptr =
nullptr;
141 window.c_inner(), opts.to_c(), &ptr, &count),
142 "sun::azimuth_extrema");
150inline std::vector<Period<TT, MJD>>
153 tempoch_period_mjd_t *ptr =
nullptr;
156 window.c_inner(), min_bearing.value(), max_bearing.value(),
157 opts.to_c(), &ptr, &count),
158 "sun::in_azimuth_range");
166inline std::vector<Period<TT, MJD>>
169 tempoch_period_mjd_t *ptr =
nullptr;
172 obs.
to_c(), window.c_inner(), min_bearing.value(),
173 max_bearing.value(), opts.to_c(), &ptr, &count),
174 "sun::outside_azimuth_range");
195 return qtty::Degree(out);
203 qtty::Degree bearing,
205 siderust_azimuth_crossing_event_t *ptr =
nullptr;
208 window.c_inner(), bearing.value(), opts.to_c(), &ptr,
210 "moon::azimuth_crossings");
220 siderust_azimuth_extremum_t *ptr =
nullptr;
223 window.c_inner(), opts.to_c(), &ptr, &count),
224 "moon::azimuth_extrema");
232inline std::vector<Period<TT, MJD>>
235 tempoch_period_mjd_t *ptr =
nullptr;
238 window.c_inner(), min_bearing.value(), max_bearing.value(),
239 opts.to_c(), &ptr, &count),
240 "moon::in_azimuth_range");
248inline std::vector<Period<TT, MJD>>
251 tempoch_period_mjd_t *ptr =
nullptr;
254 obs.
to_c(), window.c_inner(), min_bearing.value(),
255 max_bearing.value(), opts.to_c(), &ptr, &count),
256 "moon::outside_azimuth_range");
266namespace star_altitude {
276 "star_altitude::azimuth_at");
277 return qtty::Degree(out);
285 qtty::Degree bearing,
287 siderust_azimuth_crossing_event_t *ptr =
nullptr;
290 window.c_inner(), bearing.value(), opts.to_c(), &ptr,
292 "star_altitude::azimuth_crossings");
301 qtty::Degree min_bearing,
302 qtty::Degree max_bearing,
304 tempoch_period_mjd_t *ptr =
nullptr;
307 window.c_inner(), min_bearing.value(), max_bearing.value(),
308 opts.to_c(), &ptr, &count),
309 "star_altitude::in_azimuth_range");
318 qtty::Degree min_bearing,
319 qtty::Degree max_bearing,
321 tempoch_period_mjd_t *ptr =
nullptr;
324 window.c_inner(), min_bearing.value(),
325 max_bearing.value(), opts.to_c(), &ptr, &count),
326 "star_altitude::outside_azimuth_range");
336namespace icrs_altitude {
346 "icrs_altitude::azimuth_at");
347 return qtty::Degree(out);
364 qtty::Degree bearing,
366 siderust_azimuth_crossing_event_t *ptr =
nullptr;
369 window.c_inner(), bearing.value(), opts.to_c(), &ptr,
371 "icrs_altitude::azimuth_crossings");
381 qtty::Degree bearing,
402 return os <<
"unknown";
Altitude computations for Sun, Moon, stars, and arbitrary ICRS directions.
RAII Star handle, Planet value type, and catalog helpers.
RAII handle to a Star (opaque Rust object).
const SiderustStar * c_handle() const
Access the raw C handle (for passing to altitude functions).
Coordinate module umbrella.
Error handling and utility base for the siderust C++ wrapper.
std::vector< AzimuthExtremum > az_extrema_from_c(siderust_azimuth_extremum_t *ptr, uintptr_t count)
siderust_subject_t make_star_subject(const SiderustStar *h)
Build a siderust_subject_t for a star, borrowing the handle.
siderust_subject_t make_body_subject(SiderustBody b)
Build a siderust_subject_t for a solar-system body.
std::vector< AzimuthCrossingEvent > az_crossings_from_c(siderust_azimuth_crossing_event_t *ptr, uintptr_t count)
siderust_subject_t make_icrs_subject(const siderust_spherical_dir_t &dir)
Build a siderust_subject_t for a fixed ICRS direction.
std::vector< Period< TT, MJD > > periods_from_c(tempoch_period_mjd_t *ptr, uintptr_t count)
qtty::Degree azimuth_at(const spherical::direction::ICRS &dir, const Geodetic &obs, const Time< TT, MJD > &mjd)
Compute azimuth (degrees, N-clockwise) for a fixed ICRS direction.
std::vector< AzimuthCrossingEvent > azimuth_crossings(const spherical::direction::ICRS &dir, const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree bearing, const SearchOptions &opts={})
Find epochs when an ICRS direction crosses a given azimuth bearing.
std::vector< AzimuthExtremum > azimuth_extrema(const Geodetic &obs, const Period< TT, MJD > &window, const SearchOptions &opts={})
Find azimuth extrema (northernmost / southernmost) for the Moon.
std::vector< AzimuthCrossingEvent > azimuth_crossings(const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree bearing, const SearchOptions &opts={})
Find epochs when the Moon crosses a given bearing.
std::vector< Period< TT, MJD > > outside_azimuth_range(const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree min_bearing, qtty::Degree max_bearing, const SearchOptions &opts={})
Find periods when the Moon's azimuth is outside [min_bearing, max_bearing].
std::vector< Period< TT, MJD > > in_azimuth_range(const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree min_bearing, qtty::Degree max_bearing, const SearchOptions &opts={})
Find periods when the Moon's azimuth is within [min_bearing, max_bearing].
qtty::Degree azimuth_at(const Geodetic &obs, const Time< TT, MJD > &mjd)
Compute the Moon's azimuth (degrees, N-clockwise) at a given Time<TT, MJD> instant.
std::vector< Period< TT, MJD > > outside_azimuth_range(const Star &s, const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree min_bearing, qtty::Degree max_bearing, const SearchOptions &opts={})
Find periods when a star's azimuth is outside [min, max] (degrees).
std::vector< AzimuthCrossingEvent > azimuth_crossings(const Star &s, const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree bearing, const SearchOptions &opts={})
Find epochs when a star crosses a given azimuth bearing.
std::vector< Period< TT, MJD > > in_azimuth_range(const Star &s, const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree min_bearing, qtty::Degree max_bearing, const SearchOptions &opts={})
Find periods when a star's azimuth is within [min, max] (degrees).
qtty::Degree azimuth_at(const Star &s, const Geodetic &obs, const Time< TT, MJD > &mjd)
Compute a star's azimuth (degrees, N-clockwise) at a given Time<TT, MJD> instant.
std::vector< Period< TT, MJD > > in_azimuth_range(const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree min_bearing, qtty::Degree max_bearing, const SearchOptions &opts={})
Find periods when the Sun's azimuth is within [min_bearing, max_bearing].
std::vector< Period< TT, MJD > > outside_azimuth_range(const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree min_bearing, qtty::Degree max_bearing, const SearchOptions &opts={})
Find periods when the Sun's azimuth is outside [min_bearing, max_bearing].
std::vector< AzimuthCrossingEvent > azimuth_crossings(const Geodetic &obs, const Period< TT, MJD > &window, qtty::Degree bearing, const SearchOptions &opts={})
Find epochs when the Sun crosses a given bearing.
qtty::Degree azimuth_at(const Geodetic &obs, const Time< TT, MJD > &mjd)
Compute the Sun's azimuth (degrees, N-clockwise) at a given Time<TT, MJD> instant.
std::vector< AzimuthExtremum > azimuth_extrema(const Geodetic &obs, const Period< TT, MJD > &window, const SearchOptions &opts={})
Find azimuth extrema (northernmost / southernmost) for the Sun.
tempoch::EncodedTime< Scale, Format > Time
void check_status(siderust_status_t status, const char *operation)
std::ostream & operator<<(std::ostream &os, AzimuthExtremumKind kind)
Stream operator for AzimuthExtremumKind.
tempoch::Period< Time< Scale, Format > > Period
AzimuthExtremumKind
Distinguishes azimuth extrema: northernmost or southernmost bearing.
@ Max
Northernmost (or easternmost) direction reached by the body.
@ Min
Southernmost (or westernmost) direction reached by the body.
An azimuth bearing-crossing event.
Time< TT, MJD > time
Epoch of the crossing (Time<TT, MJD>).
static AzimuthCrossingEvent from_c(const siderust_azimuth_crossing_event_t &c)
CrossingDirection direction
Whether the azimuth is increasing or decreasing.
An azimuth extremum event.
AzimuthExtremumKind kind
Maximum or minimum.
Time< TT, MJD > time
Epoch of the extremum (Time<TT, MJD>).
static AzimuthExtremum from_c(const siderust_azimuth_extremum_t &c)
qtty::Degree azimuth
Azimuth at the extremum (degrees, N-clockwise).
Geodetic position (WGS84 ellipsoid).
siderust_geodetic_t to_c() const
Convert to C FFI struct.
Options for altitude search algorithms.
A direction on the celestial sphere, compile-time tagged by frame.
siderust_spherical_dir_t to_c() const
Public siderust time tags and typed time/period aliases.