57inline Solution solve_impl(
const double *r1_km,
const double *r2_km,
double tof_s,
double mu_km3_s2,
60 SiderustLambertDiagnostics diag{};
62 siderust_lambert_solve(r1_km, r2_km, tof_s, mu_km3_s2,
static_cast<int>(branch),
63 sol.v1_kms.data(), sol.v2_kms.data(), &diag);
65 sol.diag = {diag.iterations, diag.residual, diag.revolutions};
84inline Solution solve(
const double (&r1_km)[3],
const double (&r2_km)[3],
double tof_s,
90inline Solution solve(
const std::array<double, 3> &r1_km,
const std::array<double, 3> &r2_km,
99 os <<
"Lambert (v1=(" << sol.
v1_kms[0] <<
", " << sol.
v1_kms[1] <<
", " << sol.
v1_kms[2]
Error handling and utility base for the siderust C++ wrapper.
Solution solve_impl(const double *r1_km, const double *r2_km, double tof_s, double mu_km3_s2, Branch branch)
std::ostream & operator<<(std::ostream &os, const Solution &sol)
Stream a Lambert solution (velocities in km/s).
Branch
Branch selector for the Lambert solver.
@ Retrograde
Retrograde single-revolution transfer.
@ Prograde
Direct (prograde) single-revolution transfer.
Solution solve(const double(&r1_km)[3], const double(&r2_km)[3], double tof_s, double mu_km3_s2, Branch branch=Branch::Prograde)
Solve Lambert's single-revolution two-point boundary-value problem.
void check_status(siderust_status_t status, const char *operation)
Householder-iteration diagnostics accompanying a Lambert solution.
std::uint32_t iterations
Number of Householder iterations performed.
double residual
Final residual (dimensionless).
std::uint32_t revolutions
Number of complete revolutions (0 = single-rev).
Complete solution to a Lambert boundary-value problem.
std::array< double, 3 > v1_kms
Departure velocity [vx, vy, vz], km/s.
std::array< double, 3 > v2_kms
Arrival velocity [vx, vy, vz], km/s.
Diagnostics diag
Solver diagnostics.