Browse Source

workaround for orbit position bug when e > 0.995

main
cinnaboot 5 years ago
parent
commit
b702c004f0
  1. 7
      src/orbits.cpp
  2. 8
      src/orbits.h

7
src/orbits.cpp

@ -24,13 +24,16 @@ constructEllipseAE(double a, double e)
} }
bool bool
validateEllipse(const ellipse_parameters ep) validateEllipse(const ellipse_parameters& ep)
{ {
// TODO: find out why satellite position gets wonky with orbit
// eccentricity > 0.995 while passing through true anom = 0.
// maybe divide by 0, or some floating point error?
return (ep.a > 0 && return (ep.a > 0 &&
ep.b > 0 && ep.b > 0 &&
ep.a >= ep.b && ep.a >= ep.b &&
ep.e >= 0 && ep.e >= 0 &&
ep.e < 1); ep.e < 0.995);
} }
bool bool

8
src/orbits.h

@ -27,8 +27,12 @@ struct orbital_elements
double mu; // NOTE: (μ) gravitational parameter double mu; // NOTE: (μ) gravitational parameter
double nu; // NOTE: (ν) true anomaly double nu; // NOTE: (ν) true anomaly
double epsilon; // NOTE: (ε) specific orbital energy, MJ/kg
double h; // NOTE: angular momentum
glm::vec3 pos; // NOTE: true anomaly in 3d with ep.f2 at origin glm::vec3 pos; // NOTE: true anomaly in 3d with ep.f2 at origin
double radial_velocity; double vr; // NOTE: radial velocity
double gamma; // NOTE: (γ) flight path angle
}; };
struct ellipse_3d struct ellipse_3d
@ -46,7 +50,7 @@ ellipse_parameters
constructEllipseAE(double a, double e); constructEllipseAE(double a, double e);
bool bool
validateEllipse(const ellipse_parameters); validateEllipse(const ellipse_parameters& ep);
bool bool
ellipsesEqual(ellipse_parameters& e1, ellipse_parameters& e2); ellipsesEqual(ellipse_parameters& e1, ellipse_parameters& e2);

Loading…
Cancel
Save