47#include "../ffi_core.hpp"
48#include "../orbital_center.hpp"
73template <
typename F,
typename U = qtty::AstronomicalUnit>
struct BodycentricPos {
74 static_assert(frames::is_frame_v<F>,
"F must be a valid frame tag");
84 U
x()
const {
return pos.x(); }
85 U
y()
const {
return pos.y(); }
86 U
z()
const {
return pos.z(); }
136template <
typename C,
typename F,
typename U>
140 static_assert(centers::is_center_v<C>,
"C must be a valid center tag");
142 siderust_cartesian_pos_t c_pos = pos.
to_c();
143 SiderustBodycentricParams c_params = params.
to_c();
144 siderust_cartesian_pos_t c_out{};
146 check_status(siderust_to_bodycentric(c_pos, c_params, jd.value(), &c_out),
"to_bodycentric");
156template <
typename F,
typename U>
157inline cartesian::Position<centers::Geocentric, F, U>
159 siderust_cartesian_pos_t c_pos = pos.
to_c();
160 SiderustBodycentricParams c_params = params.to_c();
161 siderust_cartesian_pos_t c_out{};
163 check_status(siderust_from_bodycentric(c_pos, c_params, jd.value(), &c_out),
"from_bodycentric");
tempoch::EncodedTime< Scale, Format > Time
void check_status(siderust_status_t status, const char *operation)
BodycentricPos< F, U > to_bodycentric(const cartesian::Position< C, F, U > &pos, const BodycentricParams ¶ms, const Time< TT, JD > &jd)
Transform a position to body-centric coordinates.
Parameters for a body-centric coordinate system.
SiderustBodycentricParams to_c() const
Result of a body-centric coordinate transformation.
cartesian::Position< centers::Geocentric, F, U > to_geocentric(const Time< TT, JD > &jd) const
Transform back to geocentric coordinates.
const BodycentricParams & center_params() const
Access the embedded orbital parameters of the body.
BodycentricParams params
Orbital parameters of the body used as the coordinate origin.
cartesian::Position< centers::Bodycentric, F, U > pos
Raw Cartesian position tagged with the Bodycentric center.
U distance() const
Distance from the body (norm of the embedded pos).
U distance_to(const BodycentricPos &other) const
Distance to another body-centric position.
A 3D Cartesian position, compile-time tagged by center, frame, unit.
siderust_cartesian_pos_t to_c() const
Convert to C FFI struct.