Commit 4e61792e authored by Alexander Lapshin's avatar Alexander Lapshin

+ desc node

parent f8679894
...@@ -47,8 +47,41 @@ void AscNodeOrbit::calc_asc_node(Propagator& prop, const TimeJD& date, const boo ...@@ -47,8 +47,41 @@ void AscNodeOrbit::calc_asc_node(Propagator& prop, const TimeJD& date, const boo
} }
} }
void AscNodeOrbit::calc_desc_node(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, PhasePoint6D& result) const
{
// std::string date_s = DateToStr(date);
// std::cout << date_s << "\n";
if (vzmode) {
//if(!GetAscNodeYZ(*prop.GetPredictor()->GetPredictor(), prop.GetPredictor()->GetTime(), result, GetZ, GetVZ)){
// return false;
//};
SInitOrbit ascNodeOrbit;
if (!jump_arg_of_lat(date, prop, 180 * deg2rad, gcs_node, ascNodeOrbit)) {
throw Exp() << "internal error in descending node method 1";
}
result = ascNodeOrbit.GetPhasePointJ2000();
//std::string res_s = DateToStr(result.T);
if (date < result.T) {
throw Exp() << "internal error in ascending node method 2";
}
}
else {
if (!GetAscNodeYZ(*prop.GetPredictor()->GetPredictor(), prop.GetPredictor()->GetTime(), result, GetY, GetVY)) {
throw Exp() << "internal error in descending node method 2";
}
}
}
void AscNodeOrbit::calculate(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, bool calc_params) void AscNodeOrbit::calculate(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, bool calc_params)
{ {
m_is_desc = false;
PhasePoint6D j2000AscNodePoint; PhasePoint6D j2000AscNodePoint;
calc_asc_node(prop, date, vzmode, gcs_node, j2000AscNodePoint); calc_asc_node(prop, date, vzmode, gcs_node, j2000AscNodePoint);
calc_draconic_period(prop, j2000AscNodePoint.T, vzmode, gcs_node, m_drperiod, m_drperiodDt); calc_draconic_period(prop, j2000AscNodePoint.T, vzmode, gcs_node, m_drperiod, m_drperiodDt);
...@@ -59,6 +92,19 @@ void AscNodeOrbit::calculate(Propagator& prop, const TimeJD& date, const bool vz ...@@ -59,6 +92,19 @@ void AscNodeOrbit::calculate(Propagator& prop, const TimeJD& date, const bool vz
} }
} }
void AscNodeOrbit::calculate_desc(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, bool calc_params)
{
m_is_desc = true;
PhasePoint6D j2000DescNodePoint;
calc_desc_node(prop, date, vzmode, gcs_node, j2000DescNodePoint);
m_date = j2000DescNodePoint.T;
if (calc_params) {
calculate_params(j2000DescNodePoint);
}
}
void AscNodeOrbit::calculate_params(const PhasePoint6D& j2000AscNodePoint) void AscNodeOrbit::calculate_params(const PhasePoint6D& j2000AscNodePoint)
{ {
PhasePoint6D GCSAscNodePoint = j2000AscNodePoint; PhasePoint6D GCSAscNodePoint = j2000AscNodePoint;
...@@ -167,7 +213,6 @@ void AscNodeOrbit::calc_draconic_period(Propagator& prop, const TimeJD& asc_node ...@@ -167,7 +213,6 @@ void AscNodeOrbit::calc_draconic_period(Propagator& prop, const TimeJD& asc_node
PhasePoint6D thirdAscNode; PhasePoint6D thirdAscNode;
calc_asc_node(prop, ShiftDate(secondAscNode.T, -.5 * period * 1000), vzmode, gcs_node, thirdAscNode); calc_asc_node(prop, ShiftDate(secondAscNode.T, -.5 * period * 1000), vzmode, gcs_node, thirdAscNode);
//std::cout << DateToStr(thirdAscNode.T) << "\n";
double dracp1 = (firstAscDate - secondAscNode.T).GetDouble() * 86400 / 1000; double dracp1 = (firstAscDate - secondAscNode.T).GetDouble() * 86400 / 1000;
double dracp2 = (secondAscNode.T - thirdAscNode.T).GetDouble() * 86400 / 1000; double dracp2 = (secondAscNode.T - thirdAscNode.T).GetDouble() * 86400 / 1000;
......
...@@ -11,6 +11,7 @@ public: ...@@ -11,6 +11,7 @@ public:
AscNodeOrbit(); AscNodeOrbit();
explicit AscNodeOrbit(const PhasePoint6D& p); explicit AscNodeOrbit(const PhasePoint6D& p);
void calculate(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, bool calc_params = true); void calculate(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, bool calc_params = true);
void calculate_desc(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, bool calc_params = true);
void calculate_params(const PhasePoint6D& j2000AscNodePoint); void calculate_params(const PhasePoint6D& j2000AscNodePoint);
double get_latitude() const { return m_latitude; } double get_latitude() const { return m_latitude; }
double get_longitude() const { return m_longitude; } double get_longitude() const { return m_longitude; }
...@@ -26,8 +27,10 @@ public: ...@@ -26,8 +27,10 @@ public:
void set_age(double age_days); void set_age(double age_days);
int get_rev() const { return m_rev; } int get_rev() const { return m_rev; }
double get_age() const { return m_age; } double get_age() const { return m_age; }
bool is_desc() const { return m_is_desc; }
private: private:
void calc_asc_node(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, PhasePoint6D& result) const; void calc_asc_node(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, PhasePoint6D& result) const;
void calc_desc_node(Propagator& prop, const TimeJD& date, const bool vzmode, const bool gcs_node, PhasePoint6D& result) const;
void calc_draconic_period(Propagator& prop, const TimeJD& asc_node_date, const bool vzmode, const bool gcs_node, double& dracp, double& vdracp) const; void calc_draconic_period(Propagator& prop, const TimeJD& asc_node_date, const bool vzmode, const bool gcs_node, double& dracp, double& vdracp) const;
double get_kep_time(double TA, double e, double w) const; double get_kep_time(double TA, double e, double w) const;
static KepData get_kep_data(const Vect6& pos); static KepData get_kep_data(const Vect6& pos);
...@@ -46,4 +49,5 @@ private: ...@@ -46,4 +49,5 @@ private:
Vect6 m_j2000; Vect6 m_j2000;
Vect6 m_gcs; Vect6 m_gcs;
TimeJD m_date; TimeJD m_date;
bool m_is_desc;
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment