fix: avoid singularities
This commit is contained in:
parent
c30a4e5e22
commit
919d809467
|
@ -53,4 +53,5 @@ private:
|
||||||
double _meanAnomalyAtEpoch = 0;
|
double _meanAnomalyAtEpoch = 0;
|
||||||
|
|
||||||
const double getEccentricAnomaly() const;
|
const double getEccentricAnomaly() const;
|
||||||
|
static void makeSafe(double& value);
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,6 +11,12 @@ Orbit::Orbit()
|
||||||
_keplerianElements.resize(6);
|
_keplerianElements.resize(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// some values cause singularities when they are zero. so, make them not zero
|
||||||
|
void Orbit::makeSafe(double& value)
|
||||||
|
{
|
||||||
|
value = value == 0.0 ? 0.0000001 : value;
|
||||||
|
}
|
||||||
|
|
||||||
double Orbit::getSemiMajorAxis() const
|
double Orbit::getSemiMajorAxis() const
|
||||||
{
|
{
|
||||||
return _keplerianElements[astro::semiMajorAxisIndex];
|
return _keplerianElements[astro::semiMajorAxisIndex];
|
||||||
|
@ -35,6 +41,7 @@ double Orbit::getInclination() const
|
||||||
}
|
}
|
||||||
void Orbit::setInclination(double inclination)
|
void Orbit::setInclination(double inclination)
|
||||||
{
|
{
|
||||||
|
makeSafe(inclination);
|
||||||
_keplerianElements[astro::inclinationIndex] = inclination;
|
_keplerianElements[astro::inclinationIndex] = inclination;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +51,7 @@ double Orbit::getArgumentOfPeriapsis() const
|
||||||
}
|
}
|
||||||
void Orbit::setArgumentOfPeriapsis(double argumentOfPeriapsis)
|
void Orbit::setArgumentOfPeriapsis(double argumentOfPeriapsis)
|
||||||
{
|
{
|
||||||
|
makeSafe(argumentOfPeriapsis);
|
||||||
_keplerianElements[astro::argumentOfPeriapsisIndex] = argumentOfPeriapsis;
|
_keplerianElements[astro::argumentOfPeriapsisIndex] = argumentOfPeriapsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +61,7 @@ double Orbit::getLongitudeOfAscendingNode() const
|
||||||
}
|
}
|
||||||
void Orbit::setLongitudeOfAscendingNode(double longitudeOfAscendingNode)
|
void Orbit::setLongitudeOfAscendingNode(double longitudeOfAscendingNode)
|
||||||
{
|
{
|
||||||
|
makeSafe(longitudeOfAscendingNode);
|
||||||
_keplerianElements[astro::longitudeOfAscendingNodeIndex] = longitudeOfAscendingNode;
|
_keplerianElements[astro::longitudeOfAscendingNodeIndex] = longitudeOfAscendingNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue