|
|
|
@ -118,6 +118,34 @@ orbitGetElementsFromStateVectors(glm::dvec3 r, glm::dvec3 v, double mu) |
|
|
|
return el; |
|
|
|
return el; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
StateVectors |
|
|
|
|
|
|
|
orbitGetStateVectorsFromElements(const OrbitalElements& el, double mu) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
double p = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// FIXME: need a helper here
|
|
|
|
|
|
|
|
if (el.e < 1) { // ellipse or circle
|
|
|
|
|
|
|
|
p = el.a * (1 - pow(el.e, 2)); |
|
|
|
|
|
|
|
} else if (el.e == 1) { // parabola
|
|
|
|
|
|
|
|
assert(0); |
|
|
|
|
|
|
|
} else { // hyperbola
|
|
|
|
|
|
|
|
assert(0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// FIXME: we need to ensure that we update el.nu instead of sat.theta
|
|
|
|
|
|
|
|
double r = orbitGetRadialDistance(el.e, p, el.nu); |
|
|
|
|
|
|
|
double h = orbitGetAngularMomentum(p, mu); |
|
|
|
|
|
|
|
StateVectors sv; |
|
|
|
|
|
|
|
// TODO: getPos/getVel don't need to be interface functions
|
|
|
|
|
|
|
|
sv.position = orbitGetPositionVector(r, el.nu); |
|
|
|
|
|
|
|
sv.velocity = orbitGetVelocityVector(mu, h, el.e, el.nu); |
|
|
|
|
|
|
|
glm::dmat3 M = orbitGetXForm(el); |
|
|
|
|
|
|
|
sv.position = M * sv.position; |
|
|
|
|
|
|
|
sv.velocity = M * sv.velocity; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return sv; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
glm::dvec3 |
|
|
|
glm::dvec3 |
|
|
|
orbitGetEccentricityVector(glm::dvec3 r, glm::dvec3 v, double mu) |
|
|
|
orbitGetEccentricityVector(glm::dvec3 r, glm::dvec3 v, double mu) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|