Conquer Space 0.0.0
A space themed grand strategy game set in the near future, with realistic orbital mechanics, and an emphasis on economics and politics.
izzo.h
Go to the documentation of this file.
1/* Conquer Space
2 * Copyright (C) 2021-2025 Conquer Space
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 */
17#pragma once
18
19#include <cmath>
20#include <vector>
21
22#include <glm/glm.hpp>
23
39class Izzo {
40 public:
41 Izzo(const glm::dvec3 &r1, const glm::dvec3 &r2, const double &tof = 3.1415926535 / 2, const double &mu = 1.,
42 const bool cw = false, const int &multi_revs = 5);
43 const std::vector<glm::dvec3> &get_v1() const;
44 const std::vector<glm::dvec3> &get_v2() const;
45 const glm::dvec3 &get_r1() const;
46 const glm::dvec3 &get_r2() const;
47 const double &get_tof() const;
48 const double &get_mu() const;
49 const std::vector<double> &get_x() const;
50 const std::vector<int> &get_iters() const;
51 int get_Nmax() const;
52 void solve();
53
54 private:
55 int householder(const double T, double &x0, const int N, const double eps, const int iter_max);
56 void dTdx(double &DT, double &DDT, double &DDDT, const double x0, const double tof);
57 void x2tof(double &tof, const double x0, const int N);
58 void x2tof2(double &tof, const double x0, const int N);
59 double hypergeometricF(double z, double tol);
60
61 const glm::dvec3 r1, r2;
62 const double tof;
63 const double mu;
64 std::vector<glm::dvec3> m_v1;
65 std::vector<glm::dvec3> m_v2;
66 std::vector<int> m_iters;
67 std::vector<double> m_x;
68 double m_s, m_c, m_lambda;
69 int m_Nmax;
72 bool cw;
73};
74} // namespace cqsp::common::systems::lambert
std::vector< int > m_iters
Definition: izzo.h:66
int get_Nmax() const
Definition: izzo.cpp:336
std::vector< glm::dvec3 > m_v2
Definition: izzo.h:65
const std::vector< glm::dvec3 > & get_v1() const
Definition: izzo.cpp:286
void solve()
Definition: izzo.cpp:37
int householder(const double T, double &x0, const int N, const double eps, const int iter_max)
Definition: izzo.cpp:178
const std::vector< glm::dvec3 > & get_v2() const
Definition: izzo.cpp:293
double m_s
Definition: izzo.h:68
const glm::dvec3 & get_r2() const
Definition: izzo.cpp:305
std::vector< glm::dvec3 > m_v1
Definition: izzo.h:64
Izzo(const glm::dvec3 &r1, const glm::dvec3 &r2, const double &tof=3.1415926535/2, const double &mu=1., const bool cw=false, const int &multi_revs=5)
Definition: izzo.cpp:33
void x2tof2(double &tof, const double x0, const int N)
Definition: izzo.cpp:212
void x2tof(double &tof, const double x0, const int N)
Definition: izzo.cpp:228
void dTdx(double &DT, double &DDT, double &DDDT, const double x0, const double tof)
Definition: izzo.cpp:200
const glm::dvec3 & get_r1() const
Definition: izzo.cpp:299
const double & get_tof() const
Definition: izzo.cpp:311
double m_lambda
Definition: izzo.h:68
const double tof
Definition: izzo.h:62
double hypergeometricF(double z, double tol)
Definition: izzo.cpp:263
int m_Nmax
Definition: izzo.h:69
std::vector< double > m_x
Definition: izzo.h:67
double m_c
Definition: izzo.h:68
const glm::dvec3 r2
Definition: izzo.h:61
const double & get_mu() const
Definition: izzo.cpp:324
const std::vector< int > & get_iters() const
Definition: izzo.cpp:330
int m_multi_revs
Definition: izzo.h:71
bool cw
Definition: izzo.h:72
const double mu
Definition: izzo.h:63
const std::vector< double > & get_x() const
Definition: izzo.cpp:318
bool m_has_converged
Definition: izzo.h:70
const glm::dvec3 r1
Definition: izzo.h:61
Definition: izzo.cpp:23