Всем привет)
Переделываю с Delphi на С++ курсовую, для практики.
Возникла проблема, компилятор ругается: Call to undifined function 'KeplerEquation'
В чём может быть проблема?.. На С++ только учусь, т.ч. сильно не ругайте)
(обращение к этой функции в самом низу)
Код:
#pragma hdrstop
#include "Unit2.h"
#include "math.h"
struct TClassic
{
double EarthSCRange;
double e;
double ArgLatitude;
double ArgPericenter;
double AscNode;
double Incl;
double RealAnomaly;
double PeriRad;
double FocParameter;
double SCRange;
double SemiMajorAxis;
double SemiMinorAxis;
double Period;
double AverDegVel;
double DegVel;
double OrbVel;
double ApoVel;
double PeriVel;
double NormVel;
double RadVectVel;
double EccentrAnom;
double AverAnomaly;
double PerigeeMoment;
double OrbVelDeg;
double DragonPeriod;
double AnomPeriod;
double AverMotion;
double OscPeriod;
};
struct TOrbit
{
double Time;
TClassic Classic;
};
#define Pi 3.14
#define RE 6371.21
#define Ecl 23.71*3.14/180
#define mu 0.398603e+6
#define OmE 0.7292115e-4
#define c20 1.082627e-3
#define ts 86164.03
#define tc 86400
#define als 499.00478353
#define vl 299792.458
#define ToGrad 180/Pi
#define ToRad Pi/180
// ---
void Parameters( TOrbit &AOrbit )
{
AOrbit.Classic.RealAnomaly = AOrbit.Classic.ArgLatitude-AOrbit.Classic.ArgPericenter;
AOrbit.Classic.FocParameter = AOrbit.Classic.PeriRad*(1+AOrbit.Classic.e);
AOrbit.Classic.SCRange = AOrbit.Classic.FocParameter/(1+AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad));
AOrbit.Classic.SemiMajorAxis = AOrbit.Classic.FocParameter/(1-AOrbit.Classic.e*AOrbit.Classic.e);
AOrbit.Classic.SemiMinorAxis = AOrbit.Classic.SemiMajorAxis*sqrt(1-AOrbit.Classic.e*AOrbit.Classic.e);
AOrbit.Classic.Period = 2*Pi*AOrbit.Classic.SemiMajorAxis*sqrt(AOrbit.Classic.SemiMajorAxis/mu);
AOrbit.Classic.AverDegVel = 2*Pi/AOrbit.Classic.Period;
AOrbit.Classic.DegVel = sqrt(mu*AOrbit.Classic.FocParameter)/(AOrbit.Classic.SCRange*AOrbit.Classic.SCRange);
AOrbit.Classic.OrbVel = sqrt((mu/AOrbit.Classic.FocParameter)*(1+pow(AOrbit.Classic.e,2)+2*AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad)));
AOrbit.Classic.ApoVel = sqrt(mu/AOrbit.Classic.FocParameter)*(1-AOrbit.Classic.e);
AOrbit.Classic.PeriVel = sqrt(mu/AOrbit.Classic.FocParameter)*(1+AOrbit.Classic.e);
AOrbit.Classic.NormVel = sqrt(mu/AOrbit.Classic.FocParameter)*(1+AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad));
AOrbit.Classic.RadVectVel = sqrt(mu/AOrbit.Classic.FocParameter)*AOrbit.Classic.e*sin(AOrbit.Classic.RealAnomaly*ToRad);
AOrbit.Classic.EccentrAnom = 2*atan(sqrt((1-AOrbit.Classic.e)/(1+AOrbit.Classic.e))*tan(AOrbit.Classic.RealAnomaly*ToRad/2))*ToGrad;
AOrbit.Classic.AverAnomaly = AOrbit.Classic.EccentrAnom-AOrbit.Classic.e*sin(AOrbit.Classic.EccentrAnom*ToRad);
AOrbit.Classic.PerigeeMoment = AOrbit.Time-AOrbit.Classic.AverAnomaly/AOrbit.Classic.AverDegVel;
AOrbit.Classic.OrbVelDeg = acos(AOrbit.Classic.e*sin(AOrbit.Classic.RealAnomaly*ToRad)/sqrt(1+pow(AOrbit.Classic.e,2)+2*AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad)))*ToGrad;
AOrbit.Classic.OscPeriod = 2*Pi*AOrbit.Classic.SemiMajorAxis*sqrt(AOrbit.Classic.SemiMajorAxis/mu);
AOrbit.Classic.DragonPeriod = AOrbit.Classic.OscPeriod*(1+(3/2)*c20*pow(RE/AOrbit.Classic.FocParameter,2)*(2-(5/2)*pow(sin(AOrbit.Classic.Incl*ToRad),2))*pow((1-pow(AOrbit.Classic.e,2)),3/2)/pow(1+AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad),2)+pow(1+AOrbit.Classic.e*cos(AOrbit.Classic.AscNode*ToRad),3)/(1-pow(AOrbit.Classic.e,2)*(1-3*pow(sin(AOrbit.Classic.Incl*ToRad),2)*pow(sin(AOrbit.Classic.ArgLatitude*ToRad),2))));
AOrbit.Classic.AnomPeriod = AOrbit.Classic.OscPeriod*(1+(3/2)*c20*pow(RE/AOrbit.Classic.SemiMajorAxis,2)*pow((1+AOrbit.Classic.e*cos(AOrbit.Classic.RealAnomaly*ToRad))/(1-pow(AOrbit.Classic.e,2)),3));
AOrbit.Classic.AverMotion = 2*Pi/AOrbit.Classic.AnomPeriod;
};
//---
double KeplerEquiation(double e, double M)
{
#define Eps 1e-9
double Eold, Enew;
Eold = M;
while(fabs(Eold-Enew)<Eps)
{
Enew = M + e*sin(Eold);
Eold = Enew;
}
return Enew;
}
//---
void SetTime(double ATime, TOrbit AOrbit)
{
double AverAnomaly, EccentrAnom, RealAnomaly, ArgLatitude;
AverAnomaly = AOrbit.Classic.DegVel * ( ATime - AOrbit.Classic.PerigeeMoment);
EccentrAnom = KeplerEquation( AOrbit.Classic.e, AverAnomaly ); // здесь ошибка
RealAnomaly = 2 * atan(sqrt((1-AOrbit.Classic.e)/(1+AOrbit.Classic.e))*tan(0.5*EccentrAnom));
ArgLatitude = RealAnomaly + AOrbit.Classic.PeriRad;
AOrbit.Time = ATime;
AOrbit.Classic.AverAnomaly = AverAnomaly;
AOrbit.Classic.EccentrAnom = EccentrAnom;
AOrbit.Classic.RealAnomaly = RealAnomaly;
AOrbit.Classic.ArgLatitude = ArgLatitude;
}
#pragma package(smart_init)