|
|
|
|
@ -10,24 +10,24 @@
|
|
|
|
|
|
|
|
|
|
struct EllipseParameters |
|
|
|
|
{ |
|
|
|
|
double a; // NOTE: semi-major axis
|
|
|
|
|
double b; // NOTE: semi-minor axis
|
|
|
|
|
double e; // NOTE: eccentricity
|
|
|
|
|
double c; // NOTE: linear eccentricity
|
|
|
|
|
double p; // NOTE: semilatus rectum
|
|
|
|
|
glm::vec2 f1; // NOTE: 'primary' focus
|
|
|
|
|
glm::vec2 f2; // NOTE: 'vacant' focus
|
|
|
|
|
double a; // semi-major axis
|
|
|
|
|
double b; // semi-minor axis
|
|
|
|
|
double e; // eccentricity
|
|
|
|
|
double c; // linear eccentricity
|
|
|
|
|
double p; // semilatus rectum
|
|
|
|
|
glm::vec2 f1; // 'primary' focus
|
|
|
|
|
glm::vec2 f2; // 'vacant' focus
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct OrbitalElements |
|
|
|
|
{ |
|
|
|
|
// NOTE: classical orbital elements
|
|
|
|
|
double a; // NOTE: semimajor axis
|
|
|
|
|
double e; // NOTE: eccentricity
|
|
|
|
|
double iota; // NOTE: (ι) inclination
|
|
|
|
|
double ohm; // NOTE: (Ω) longitude of the ascending node
|
|
|
|
|
double omega; // NOTE: (ω) argument of periapsis
|
|
|
|
|
double nu; // NOTE: (ν) true anomaly at T0
|
|
|
|
|
double a; // semimajor axis
|
|
|
|
|
double e; // eccentricity
|
|
|
|
|
double iota; // (ι) inclination
|
|
|
|
|
double ohm; // (Ω) longitude of the ascending node
|
|
|
|
|
double omega; // (ω) argument of periapsis
|
|
|
|
|
double nu; // (ν) true anomaly at T0
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct Ellipse3D |
|
|
|
|
@ -38,8 +38,8 @@ struct Ellipse3D
|
|
|
|
|
|
|
|
|
|
struct GravBody |
|
|
|
|
{ |
|
|
|
|
double mu; // NOTE: (μ) gravitational parameter
|
|
|
|
|
double radius; // NOTE: radius of ideal sphere representing the body
|
|
|
|
|
double mu; // (μ) gravitational parameter
|
|
|
|
|
double radius; // radius of ideal sphere representing the body
|
|
|
|
|
// double r_atmos; // TODO: bodies w/ atmosphere
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
@ -47,10 +47,10 @@ struct Satellite
|
|
|
|
|
{ |
|
|
|
|
glm::vec3 position; |
|
|
|
|
glm::vec3 velocity; |
|
|
|
|
double theta; // NOTE: true anomaly
|
|
|
|
|
double r; // NOTE: radius magnitude at theta
|
|
|
|
|
double gamma; // NOTE: (γ) flight path angle
|
|
|
|
|
double v; // NOTE: velocity magnitute
|
|
|
|
|
double theta; // true anomaly
|
|
|
|
|
double r; // radius magnitude at theta
|
|
|
|
|
double gamma; // (γ) flight path angle
|
|
|
|
|
double v; // velocity magnitute
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// NOTE: top level composite for 2 body system
|
|
|
|
|
@ -62,11 +62,11 @@ struct TwoBodySystem
|
|
|
|
|
Ellipse3D e3d; |
|
|
|
|
OrbitalElements elements; |
|
|
|
|
|
|
|
|
|
double epsilon; // NOTE: (ε) specific orbital energy, MJ/kg
|
|
|
|
|
double h; // NOTE: angular momentum
|
|
|
|
|
double r_apoapsis; // NOTE: apoapse distance from body center
|
|
|
|
|
double r_periapsis; // NOTE: periapsis distance from body center
|
|
|
|
|
double orbital_period; // NOTE: in seconds
|
|
|
|
|
double epsilon; // (ε) specific orbital energy, MJ/kg
|
|
|
|
|
double h; // angular momentum
|
|
|
|
|
double r_apoapsis; // apoapse distance from body center
|
|
|
|
|
double r_periapsis; // periapsis distance from body center
|
|
|
|
|
double orbital_period; // in seconds
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -110,7 +110,7 @@ ellipsesEqual(EllipseParameters& e1, EllipseParameters& e2)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// NOTE: create vertices for a 3d ellipse
|
|
|
|
|
// NOTE: all vertices are in the x/y plane with z = 0
|
|
|
|
|
// all vertices are in the x/y plane with z = 0
|
|
|
|
|
Ellipse3D |
|
|
|
|
ellipseInit3D(EllipseParameters ep, uint vert_count); |
|
|
|
|
|
|
|
|
|
@ -227,7 +227,7 @@ orbitUpdate(OrbitalElements& o, double a, double e);
|
|
|
|
|
double |
|
|
|
|
getPropagatedTrueAnomaly(TwoBodySystem sys, |
|
|
|
|
double initial_anom, |
|
|
|
|
double time_step); // NOTE: in seconds
|
|
|
|
|
double time_step); // in seconds
|
|
|
|
|
|
|
|
|
|
double |
|
|
|
|
orbitGetTimeOfFlight(TwoBodySystem sys, double theta_begin, double theta_end); |
|
|
|
|
|