-
GASpiridonov authored
Исправлены ошибки
GASpiridonov authoredИсправлены ошибки
Satellite.cpp 14.63 KiB
#include "Satellite.h"
int Satellite::satellite_number = 0;
const std::vector<double> Satellite::coef_time_step { 0.000000000000000000, 0.056262560526922147, //коэффиценты для разбития
0.180240691736892365, 0.352624717113169637, // шага на подинтервалы
0.547153626330555383, 0.734210177215410532,
0.885320946839095768, 0.977520613561287501 };
double calc_i(const double c, const double c1, const double c2, const double c3) {
if (c3 >= 0) return acos(c3 / c);
else if (c3 == 0 && (pow(c1, 2) + pow(c2, 2) != 0)) return (M_PI_2);
else if (c3 < 0) return (M_PI - acos(c3 / c));
else return -2;
}
double calc_Ω(const double c1, const double c2) {
if (c1 >= 0 && c2 <= 0) return atan(c1 / c2);
else if ((c1 >= 0) && (c2 > 0)) return (M_PI - atan(c1 / c2));
else if ((c1 < 0) && (c2 >= 0)) return (M_PI + atan(c1 / c2));
else if ((c1 < 0) && (c2 < 0)) return (2 * M_PI - atan(c1 / c2));
return -2;
}
double calc_ω(const double i, const double Ω, const double l, const double l1, const double l2, const double l3) {
if (cos(i) != 0)
return (atan2(sin((-l1 * sin(Ω) + l2 * cos(Ω)) / (l * cos(i))), cos((l1 * cos(Ω) + l2 * sin(Ω)) / (l))));
else
return atan2(sin(l3 / l), cos(l2 / (l * sin(Ω))));
}
double calc_u(const double x, const double y, const double z, const double i, const double Ω, const double r) {
return (atan2((z) / (r * sin(i)), ((x / r) * cos(Ω) + y / r * sin(Ω))));
}
double calc_N(const double u, const double ω) {
return (atan2((sin(u) * cos(ω) - cos(u) * sin(ω)), (cos(u) * cos(ω) + sin(u) * sin(ω))));
}
int calc_component_V(double p, double e, double N, double& Vr, double& Vτ, const double& gpE) {
Vr = sqrt(gpE / p) * e * sin(N);
Vτ = sqrt(gpE / p) * (1 + e * cos(N));
return 0;
}
double calc_θ(const double Vr, const double Vτ, const double V) {
return (atan2(Vr / V, Vτ / V));
}
double calculate_E(const double M, const double e) {
double buffer_Ek{ M };
double buffer_Ek1{ 0 };
for (short i = 0; i < 4; i++) {
buffer_Ek1 = M + e * sin(buffer_Ek);
buffer_Ek = buffer_Ek1;
}
return buffer_Ek1;
}
int calculeteKeplerToCoord(Matrix& DCS, const double r, const double u, const double Ω, const double i) {
DCS(0, 0) = r * (cos(u) * cos(Ω) - sin(u) * sin(Ω) * cos(i));
DCS(1, 0) = r * (cos(u) * sin(Ω) + sin(u) * cos(Ω) * cos(i));
DCS(2, 0) = r * sin(u) * sin(i);
return 1;
}
int calculateKeplerToSpeed(Matrix& DVS, const Matrix& DCS, const double r, const double u, const double Ω, const double i, const double V_r, const double V_τ) {
DVS(0, 0) = DCS(0, 0) / r * V_r + (-sin(u) * cos(Ω) - cos(u) * sin(Ω) * cos(i)) * V_τ;
DVS(1, 0) = DCS(1, 0) / r * V_r + (-sin(u) * sin(Ω) - cos(u) * cos(Ω) * cos(i)) * V_τ;
DVS(2, 0) = DCS(2, 0) / r * V_r + cos(u) * sin(i) * V_τ;