9#include "../centers.hpp"
10#include "../ffi_core.hpp"
11#include "../frames.hpp"
13#include <qtty/qtty.hpp>
28 static_assert(frames::is_frame_v<F>,
"F must be a valid frame tag");
35 Direction(
double x_,
double y_,
double z_) :
x(x_),
y(y_),
z(z_) {}
52template <
typename C,
typename F,
typename U = qtty::Meter>
54 static_assert(frames::is_frame_v<F>,
"F must be a valid frame tag");
55 static_assert(centers::is_center_v<C>,
"C must be a valid center tag");
78 siderust_cartesian_pos_t
to_c()
const {
A unit-vector direction in Cartesian form, compile-time frame-tagged.
double x
X component (unitless).
double y
Y component (unitless).
static constexpr siderust_frame_t frame_id()
Direction(double x_, double y_, double z_)
double z
Z component (unitless).
A 3D Cartesian position, compile-time tagged by center, frame, unit.
static constexpr siderust_center_t center_id()
siderust_cartesian_pos_t to_c() const
Convert to C FFI struct.
static Position from_c(const siderust_cartesian_pos_t &c)
Create from C FFI struct (ignoring runtime frame/center - trust the type).
Position(double x_, double y_, double z_)
Position(U x_, U y_, U z_)
static constexpr siderust_frame_t frame_id()
SFINAE helper: every frame tag must provide these static members.