1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (C) 2026 Vallés Puig, Ramon
//! # Azimuth Type Definitions
//!
//! ## Scientific scope
//!
//! Pure data structures expressing the *result* of an azimuth analysis:
//! bearing‑crossing events (instants when *A(t)* sweeps through a fixed
//! compass bearing) and azimuth extrema (turning points of *A(t)*),
//! together with a query descriptor for range searches over the circular
//! `[0°, 360°)` domain. Wrap‑around ranges spanning North are encoded by
//! `min_azimuth > max_azimuth`; this is a convention, not a constraint
//! enforced at the type level.
//!
//! ## Technical scope
//!
//! No functions. Defines:
//! - [`AzimuthCrossingDirection`] (re‑exported from `altitude`),
//! - [`AzimuthCrossingEvent`],
//! - [`AzimuthExtremumKind`] / [`AzimuthExtremum`],
//! - [`AzimuthQuery`].
//!
//! ## References
//! None.
use crateCrossingDirection;
use crate*;
use crate;
// Re-export CrossingDirection so consumers only need to import from this module.
pub use crateCrossingDirection as AzimuthCrossingDirection;
// ---------------------------------------------------------------------------
// Bearing Crossing Types
// ---------------------------------------------------------------------------
/// A bearing-crossing event: the moment a body's azimuth passes through a
/// specific compass bearing.
///
/// `direction` is [`CrossingDirection::Rising`] when the azimuth is increasing
/// (moving clockwise / eastward through the bearing), and
/// [`CrossingDirection::Setting`] when decreasing (westward).
// ---------------------------------------------------------------------------
// Azimuth Extremum Types
// ---------------------------------------------------------------------------
/// Kind of azimuth extremum.
/// An azimuth extremum event.
// ---------------------------------------------------------------------------
// Query Type
// ---------------------------------------------------------------------------
/// Describes what to search for: observer, time window, and the azimuth
/// range of interest.
///
/// All fields use strongly-typed `qtty` quantities; time is MJD on the TT axis.
///
/// ## Wrap-around ranges
///
/// If `min_azimuth > max_azimuth` the query is interpreted as a
/// **wrap-around** (North-crossing) range: the body is "in range" when
/// `az ≥ min_azimuth OR az ≤ max_azimuth`.
///
/// For example `{ min: 350°, max: 10° }` matches azimuths from 350° through
/// North (0°) to 10°.