Updated SolarPosition
parent
b39bef0611
commit
5f1583a6fc
1
Makefile
1
Makefile
|
|
@ -16,6 +16,7 @@ SOURCES=Eci.cpp \
|
||||||
Observer.cpp \
|
Observer.cpp \
|
||||||
OrbitalElements.cpp \
|
OrbitalElements.cpp \
|
||||||
SGP4.cpp \
|
SGP4.cpp \
|
||||||
|
SolarPosition.cpp \
|
||||||
Timespan.cpp \
|
Timespan.cpp \
|
||||||
Tle.cpp
|
Tle.cpp
|
||||||
OBJECTS=$(SOURCES:.cpp=.o)
|
OBJECTS=$(SOURCES:.cpp=.o)
|
||||||
|
|
|
||||||
|
|
@ -4,30 +4,29 @@
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
SolarPosition::SolarPosition(void) {
|
Eci SolarPosition::FindPosition(const Julian& j)
|
||||||
}
|
{
|
||||||
|
|
||||||
SolarPosition::~SolarPosition(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void SolarPosition::FindPosition(const Julian& j, Eci& eci) {
|
|
||||||
|
|
||||||
const double mjd = j.FromJan1_12h_1900();
|
const double mjd = j.FromJan1_12h_1900();
|
||||||
const double year = 1900 + mjd / 365.25;
|
const double year = 1900 + mjd / 365.25;
|
||||||
const double T = (mjd + Delta_ET(year) / kSECONDS_PER_DAY) / 36525.0;
|
const double T = (mjd + Delta_ET(year) / kSECONDS_PER_DAY) / 36525.0;
|
||||||
const double M = DegreesToRadians(Modulus(358.47583 + Modulus(35999.04975 * T, 360.0)
|
const double M = DegreesToRadians(Modulus(358.47583
|
||||||
- (0.000150 + 0.0000033 * T) * T * T, 360.0));
|
+ Modulus(35999.04975 * T, 360.0)
|
||||||
const double L = DegreesToRadians(Modulus(279.69668 + Modulus(36000.76892 * T, 360.0)
|
- (0.000150 + 0.0000033 * T) * T * T, 360.0));
|
||||||
+ 0.0003025 * T*T, 360.0));
|
const double L = DegreesToRadians(Modulus(279.69668
|
||||||
|
+ Modulus(36000.76892 * T, 360.0)
|
||||||
|
+ 0.0003025 * T*T, 360.0));
|
||||||
const double e = 0.01675104 - (0.0000418 + 0.000000126 * T) * T;
|
const double e = 0.01675104 - (0.0000418 + 0.000000126 * T) * T;
|
||||||
const double C = DegreesToRadians((1.919460 - (0.004789 + 0.000014 * T) * T) * sin(M)
|
const double C = DegreesToRadians((1.919460
|
||||||
+ (0.020094 - 0.000100 * T) * sin(2 * M) + 0.000293 * sin(3 * M));
|
- (0.004789 + 0.000014 * T) * T) * sin(M)
|
||||||
|
+ (0.020094 - 0.000100 * T) * sin(2 * M)
|
||||||
|
+ 0.000293 * sin(3 * M));
|
||||||
const double O = DegreesToRadians(Modulus(259.18 - 1934.142 * T, 360.0));
|
const double O = DegreesToRadians(Modulus(259.18 - 1934.142 * T, 360.0));
|
||||||
const double Lsa = Modulus(L + C - DegreesToRadians(0.00569 - 0.00479 * sin(O)), kTWOPI);
|
const double Lsa = Modulus(L + C
|
||||||
|
- DegreesToRadians(0.00569 - 0.00479 * sin(O)), kTWOPI);
|
||||||
const double nu = Modulus(M + C, kTWOPI);
|
const double nu = Modulus(M + C, kTWOPI);
|
||||||
double R = 1.0000002 * (1 - e * e) / (1 + e * cos(nu));
|
double R = 1.0000002 * (1 - e * e) / (1 + e * cos(nu));
|
||||||
const double eps = DegreesToRadians(23.452294 - (0.0130125 + (0.00000164 -
|
const double eps = DegreesToRadians(23.452294 - (0.0130125
|
||||||
0.000000503 * T) * T) * T + 0.00256 * cos(O));
|
+ (0.00000164 - 0.000000503 * T) * T) * T + 0.00256 * cos(O));
|
||||||
R = R * kAU;
|
R = R * kAU;
|
||||||
|
|
||||||
Vector solar_position = Vector(R * cos(Lsa),
|
Vector solar_position = Vector(R * cos(Lsa),
|
||||||
|
|
@ -35,18 +34,21 @@ void SolarPosition::FindPosition(const Julian& j, Eci& eci) {
|
||||||
R * sin(Lsa) * sin(eps),
|
R * sin(Lsa) * sin(eps),
|
||||||
R);
|
R);
|
||||||
|
|
||||||
eci = Eci(j, solar_position);
|
return Eci(j, solar_position);
|
||||||
}
|
}
|
||||||
|
|
||||||
double SolarPosition::Modulus(double arg1, double arg2) const {
|
double SolarPosition::Modulus(double arg1, double arg2) const
|
||||||
|
{
|
||||||
double result = arg1 - arg2 * floor(arg1 / arg2);
|
double result = arg1 - arg2 * floor(arg1 / arg2);
|
||||||
if (result < 0.0)
|
if (result < 0.0)
|
||||||
|
{
|
||||||
result += arg2;
|
result += arg2;
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
double SolarPosition::Delta_ET(double year) const {
|
double SolarPosition::Delta_ET(double year) const
|
||||||
|
{
|
||||||
return 26.465 + 0.747622 * (year - 1950) + 1.886913 * sin(kTWOPI * (year - 1975) / 33);
|
return 26.465 + 0.747622 * (year - 1950) + 1.886913
|
||||||
|
* sin(kTWOPI * (year - 1975) / 33);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,18 @@
|
||||||
#include "Julian.h"
|
#include "Julian.h"
|
||||||
#include "Eci.h"
|
#include "Eci.h"
|
||||||
|
|
||||||
class SolarPosition {
|
class SolarPosition
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
SolarPosition(void);
|
SolarPosition()
|
||||||
virtual ~SolarPosition(void);
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void FindPosition(const Julian& j, Eci& eci);
|
virtual ~SolarPosition()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Eci FindPosition(const Julian& j);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double Modulus(double arg1, double arg2) const;
|
double Modulus(double arg1, double arg2) const;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue