Updated Eci
parent
0d17be39fa
commit
4aab9bf601
|
|
@ -16,11 +16,21 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* radians
|
* default is in degrees
|
||||||
*/
|
*/
|
||||||
CoordGeodetic(double lat, double lon, double alt)
|
CoordGeodetic(double lat, double lon, double alt, bool radians = false)
|
||||||
: latitude(lat), longitude(lon), altitude(alt)
|
|
||||||
{
|
{
|
||||||
|
if (radians)
|
||||||
|
{
|
||||||
|
latitude = lat;
|
||||||
|
longitude = lon;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
latitude = DegreesToRadians(lat);
|
||||||
|
longitude = DegreesToRadians(lon);
|
||||||
|
}
|
||||||
|
altitude = alt;
|
||||||
}
|
}
|
||||||
|
|
||||||
CoordGeodetic(const CoordGeodetic& g)
|
CoordGeodetic(const CoordGeodetic& g)
|
||||||
|
|
|
||||||
49
Eci.cpp
49
Eci.cpp
|
|
@ -1,26 +1,26 @@
|
||||||
#include "Eci.h"
|
#include "Eci.h"
|
||||||
|
|
||||||
#include "Globals.h"
|
void Eci::ToEci(const Julian& date, const CoordGeodetic &g)
|
||||||
|
{
|
||||||
Eci::Eci(const Julian &date, const CoordGeodetic &geo)
|
/*
|
||||||
: date_(date) {
|
* set date
|
||||||
|
*/
|
||||||
|
date_ = date;
|
||||||
|
|
||||||
static const double mfactor = kTWOPI * (kOMEGA_E / kSECONDS_PER_DAY);
|
static const double mfactor = kTWOPI * (kOMEGA_E / kSECONDS_PER_DAY);
|
||||||
const double latitude = geo.latitude;
|
|
||||||
const double longitude = geo.longitude;
|
|
||||||
const double altitude = geo.altitude;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calculate Local Mean Sidereal Time for observers longitude
|
* Calculate Local Mean Sidereal Time for observers longitude
|
||||||
*/
|
*/
|
||||||
const double theta = date_.ToLocalMeanSiderealTime(longitude);
|
const double theta = date_.ToLocalMeanSiderealTime(g.longitude);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* take into account earth flattening
|
* take into account earth flattening
|
||||||
*/
|
*/
|
||||||
const double c = 1.0 / sqrt(1.0 + kF * (kF - 2.0) * pow(sin(latitude), 2.0));
|
const double c = 1.0 /
|
||||||
|
sqrt(1.0 + kF * (kF - 2.0) * pow(sin(g.latitude), 2.0));
|
||||||
const double s = pow(1.0 - kF, 2.0) * c;
|
const double s = pow(1.0 - kF, 2.0) * c;
|
||||||
const double achcp = (kXKMPER * c + altitude) * cos(latitude);
|
const double achcp = (kXKMPER * c + g.altitude) * cos(g.latitude);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* X position in km
|
* X position in km
|
||||||
|
|
@ -30,7 +30,7 @@ Eci::Eci(const Julian &date, const CoordGeodetic &geo)
|
||||||
*/
|
*/
|
||||||
position_.x = achcp * cos(theta);
|
position_.x = achcp * cos(theta);
|
||||||
position_.y = achcp * sin(theta);
|
position_.y = achcp * sin(theta);
|
||||||
position_.z = (kXKMPER * s + altitude) * sin(latitude);
|
position_.z = (kXKMPER * s + g.altitude) * sin(g.latitude);
|
||||||
position_.w = position_.GetMagnitude();
|
position_.w = position_.GetMagnitude();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -45,21 +45,8 @@ Eci::Eci(const Julian &date, const CoordGeodetic &geo)
|
||||||
velocity_.w = velocity_.GetMagnitude();
|
velocity_.w = velocity_.GetMagnitude();
|
||||||
}
|
}
|
||||||
|
|
||||||
Eci::Eci(const Julian &date, const Vector &position)
|
CoordGeodetic Eci::ToGeodetic() const
|
||||||
: date_(date), position_(position) {
|
{
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Eci::Eci(const Julian &date, const Vector &position, const Vector &velocity)
|
|
||||||
: date_(date), position_(position), velocity_(velocity) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Eci::~Eci(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
CoordGeodetic Eci::ToGeodetic() const {
|
|
||||||
|
|
||||||
const double theta = AcTan(position_.y, position_.x);
|
const double theta = AcTan(position_.y, position_.x);
|
||||||
|
|
||||||
// 0 >= lon < 360
|
// 0 >= lon < 360
|
||||||
|
|
@ -67,7 +54,9 @@ CoordGeodetic Eci::ToGeodetic() const {
|
||||||
// 180 >= lon < 180
|
// 180 >= lon < 180
|
||||||
const double lon = fmod(theta - date_.ToGreenwichSiderealTime(), kPI);
|
const double lon = fmod(theta - date_.ToGreenwichSiderealTime(), kPI);
|
||||||
|
|
||||||
const double r = sqrt((position_.x * position_.x) + (position_.y * position_.y));
|
const double r = sqrt((position_.x * position_.x) +
|
||||||
|
(position_.y * position_.y));
|
||||||
|
|
||||||
static const double e2 = kF * (2.0 - kF);
|
static const double e2 = kF * (2.0 - kF);
|
||||||
|
|
||||||
double lat = AcTan(position_.z, r);
|
double lat = AcTan(position_.z, r);
|
||||||
|
|
@ -75,13 +64,15 @@ CoordGeodetic Eci::ToGeodetic() const {
|
||||||
double c = 0.0;
|
double c = 0.0;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
|
||||||
do {
|
do
|
||||||
|
{
|
||||||
phi = lat;
|
phi = lat;
|
||||||
const double sinphi = sin(phi);
|
const double sinphi = sin(phi);
|
||||||
c = 1.0 / sqrt(1.0 - e2 * sinphi * sinphi);
|
c = 1.0 / sqrt(1.0 - e2 * sinphi * sinphi);
|
||||||
lat = AcTan(position_.z + kXKMPER * c * e2 * sinphi, r);
|
lat = AcTan(position_.z + kXKMPER * c * e2 * sinphi, r);
|
||||||
cnt++;
|
cnt++;
|
||||||
} while (fabs(lat - phi) >= 1e-10 && cnt < 10);
|
}
|
||||||
|
while (fabs(lat - phi) >= 1e-10 && cnt < 10);
|
||||||
|
|
||||||
const double alt = r / cos(lat) - kXKMPER * c;
|
const double alt = r / cos(lat) - kXKMPER * c;
|
||||||
|
|
||||||
|
|
|
||||||
50
Eci.h
50
Eci.h
|
|
@ -4,31 +4,61 @@
|
||||||
#include "CoordGeodetic.h"
|
#include "CoordGeodetic.h"
|
||||||
#include "Vector.h"
|
#include "Vector.h"
|
||||||
#include "Julian.h"
|
#include "Julian.h"
|
||||||
|
#include "Globals.h"
|
||||||
|
|
||||||
class Eci {
|
class Eci
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Eci() {
|
/*
|
||||||
};
|
* in degrees
|
||||||
Eci(const Julian &date, const CoordGeodetic &geo);
|
*/
|
||||||
Eci(const Julian &date, const Vector &position);
|
Eci(const Julian& date, double latitude, double longitude, double altitude)
|
||||||
Eci(const Julian &date, const Vector &position, const Vector &velocity);
|
{
|
||||||
virtual ~Eci(void);
|
ToEci(date, CoordGeodetic(latitude, longitude, altitude));
|
||||||
|
}
|
||||||
|
|
||||||
Vector GetPosition() const {
|
Eci(const Julian& date, const CoordGeodetic& g)
|
||||||
|
{
|
||||||
|
ToEci(date, g);
|
||||||
|
}
|
||||||
|
|
||||||
|
Eci(const Julian &date, const Vector &position)
|
||||||
|
: date_(date), position_(position)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Eci(const Julian &date, const Vector &position, const Vector &velocity)
|
||||||
|
: date_(date), position_(position), velocity_(velocity)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~Eci()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector GetPosition() const
|
||||||
|
{
|
||||||
return position_;
|
return position_;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector GetVelocity() const {
|
Vector GetVelocity() const
|
||||||
|
{
|
||||||
return velocity_;
|
return velocity_;
|
||||||
}
|
}
|
||||||
|
|
||||||
Julian GetDate() const {
|
Julian GetDate() const
|
||||||
|
{
|
||||||
return date_;
|
return date_;
|
||||||
}
|
}
|
||||||
|
|
||||||
CoordGeodetic ToGeodetic() const;
|
CoordGeodetic ToGeodetic() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void ToEci(const Julian& date, double latitude, double longitude,
|
||||||
|
double altitude);
|
||||||
|
void ToEci(const Julian& date, const CoordGeodetic& g);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Julian date_;
|
Julian date_;
|
||||||
Vector position_;
|
Vector position_;
|
||||||
|
|
|
||||||
16
Observer.cpp
16
Observer.cpp
|
|
@ -5,19 +5,15 @@
|
||||||
/*
|
/*
|
||||||
* in degrees!
|
* in degrees!
|
||||||
*/
|
*/
|
||||||
Observer::Observer(const double latitude, const double longitude, const double altitude) {
|
Observer::Observer(const double latitude, const double longitude, const double altitude)
|
||||||
|
: geo_(DegreesToRadians(latitude), DegreesToRadians(longitude), altitude),
|
||||||
geo_.latitude = DegreesToRadians(latitude);
|
observers_eci_(Julian(), geo_)
|
||||||
geo_.longitude = DegreesToRadians(longitude);
|
{
|
||||||
geo_.altitude = altitude;
|
|
||||||
|
|
||||||
observers_eci_ = Eci(Julian(), geo_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Observer::Observer(const CoordGeodetic &geo)
|
Observer::Observer(const CoordGeodetic &geo)
|
||||||
: geo_(geo) {
|
: geo_(geo), observers_eci_(Julian(), geo_)
|
||||||
|
{
|
||||||
observers_eci_ = Eci(Julian(), geo_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Observer::~Observer(void) {
|
Observer::~Observer(void) {
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ const int kPASS_TIME_STEP = 180; // time step in seconds, when searching for aos
|
||||||
double FindMaxElevation(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& aos, const Julian& los) {
|
double FindMaxElevation(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& aos, const Julian& los) {
|
||||||
|
|
||||||
Observer obs(user_geo);
|
Observer obs(user_geo);
|
||||||
Eci eci;
|
|
||||||
|
|
||||||
double max_elevation = -99.9;
|
double max_elevation = -99.9;
|
||||||
/*
|
/*
|
||||||
|
|
@ -31,7 +30,7 @@ double FindMaxElevation(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian&
|
||||||
/*
|
/*
|
||||||
* find position
|
* find position
|
||||||
*/
|
*/
|
||||||
sgp4.FindPosition(&eci, current_time);
|
Eci eci = sgp4.FindPosition(current_time);
|
||||||
CoordTopographic topo = obs.GetLookAngle(eci);
|
CoordTopographic topo = obs.GetLookAngle(eci);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -85,7 +84,6 @@ double FindMaxElevation(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian&
|
||||||
Julian FindCrossingPoint(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& initial_time1, const Julian& initial_time2, bool finding_aos) {
|
Julian FindCrossingPoint(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& initial_time1, const Julian& initial_time2, bool finding_aos) {
|
||||||
|
|
||||||
Observer obs(user_geo);
|
Observer obs(user_geo);
|
||||||
Eci eci;
|
|
||||||
|
|
||||||
bool searching = true;
|
bool searching = true;
|
||||||
unsigned int loop_count = 0;
|
unsigned int loop_count = 0;
|
||||||
|
|
@ -100,7 +98,7 @@ Julian FindCrossingPoint(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian
|
||||||
/*
|
/*
|
||||||
* find position
|
* find position
|
||||||
*/
|
*/
|
||||||
sgp4.FindPosition(&eci, middle_time);
|
Eci eci = sgp4.FindPosition(middle_time);
|
||||||
CoordTopographic topo = obs.GetLookAngle(eci);
|
CoordTopographic topo = obs.GetLookAngle(eci);
|
||||||
|
|
||||||
if (topo.elevation > 0.0) {
|
if (topo.elevation > 0.0) {
|
||||||
|
|
@ -136,7 +134,6 @@ Julian FindCrossingPoint(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian
|
||||||
void AOSLOS(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& start_time, const Julian& end_time) {
|
void AOSLOS(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& start_time, const Julian& end_time) {
|
||||||
|
|
||||||
Observer obs(user_geo);
|
Observer obs(user_geo);
|
||||||
Eci eci;
|
|
||||||
|
|
||||||
Timespan time_step(0, 0, 0, kPASS_TIME_STEP);
|
Timespan time_step(0, 0, 0, kPASS_TIME_STEP);
|
||||||
|
|
||||||
|
|
@ -153,7 +150,7 @@ void AOSLOS(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& start_time,
|
||||||
while (current_time < end_time) {
|
while (current_time < end_time) {
|
||||||
|
|
||||||
// find position
|
// find position
|
||||||
sgp4.FindPosition(&eci, current_time);
|
Eci eci = sgp4.FindPosition(current_time);
|
||||||
CoordTopographic topo = obs.GetLookAngle(eci);
|
CoordTopographic topo = obs.GetLookAngle(eci);
|
||||||
|
|
||||||
if (topo.elevation > 0.0) {
|
if (topo.elevation > 0.0) {
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@ void RunTle(Tle tle, double start, double end, double inc) {
|
||||||
while (running) {
|
while (running) {
|
||||||
try {
|
try {
|
||||||
double val;
|
double val;
|
||||||
Eci eci;
|
|
||||||
if (first_run && current != 0.0) {
|
if (first_run && current != 0.0) {
|
||||||
/*
|
/*
|
||||||
* make sure first run is always as zero
|
* make sure first run is always as zero
|
||||||
|
|
@ -35,7 +34,7 @@ void RunTle(Tle tle, double start, double end, double inc) {
|
||||||
*/
|
*/
|
||||||
val = current;
|
val = current;
|
||||||
}
|
}
|
||||||
model.FindPosition(&eci, val);
|
Eci eci = model.FindPosition(val);
|
||||||
|
|
||||||
Vector position = eci.GetPosition();
|
Vector position = eci.GetPosition();
|
||||||
Vector velocity = eci.GetVelocity();
|
Vector velocity = eci.GetVelocity();
|
||||||
|
|
|
||||||
24
SGP4.cpp
24
SGP4.cpp
|
|
@ -178,22 +178,22 @@ void SGP4::Initialize() {
|
||||||
first_run_ = false;
|
first_run_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SGP4::FindPosition(Eci* eci, double tsince) const {
|
Eci SGP4::FindPosition(double tsince) const {
|
||||||
|
|
||||||
if (use_deep_space_)
|
if (use_deep_space_)
|
||||||
FindPositionSDP4(eci, tsince);
|
return FindPositionSDP4(tsince);
|
||||||
else
|
else
|
||||||
FindPositionSGP4(eci, tsince);
|
return FindPositionSGP4(tsince);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SGP4::FindPosition(Eci* eci, const Julian& date) const {
|
Eci SGP4::FindPosition(const Julian& date) const {
|
||||||
|
|
||||||
Timespan diff = date - elements_.Epoch();
|
Timespan diff = date - elements_.Epoch();
|
||||||
|
|
||||||
FindPosition(eci, diff.GetTotalMinutes());
|
return FindPosition(diff.GetTotalMinutes());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SGP4::FindPositionSDP4(Eci* eci, double tsince) const {
|
Eci SGP4::FindPositionSDP4(double tsince) const {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the final values
|
* the final values
|
||||||
|
|
@ -286,7 +286,7 @@ void SGP4::FindPositionSDP4(Eci* eci, double tsince) const {
|
||||||
/*
|
/*
|
||||||
* using calculated values, find position and velocity
|
* using calculated values, find position and velocity
|
||||||
*/
|
*/
|
||||||
CalculateFinalPositionVelocity(eci, tsince, e,
|
return CalculateFinalPositionVelocity(tsince, e,
|
||||||
a, omega, xl, xnode,
|
a, omega, xl, xnode,
|
||||||
xincl, perturbed_xlcof, perturbed_aycof,
|
xincl, perturbed_xlcof, perturbed_aycof,
|
||||||
perturbed_x3thm1, perturbed_x1mth2, perturbed_x7thm1,
|
perturbed_x3thm1, perturbed_x1mth2, perturbed_x7thm1,
|
||||||
|
|
@ -294,7 +294,7 @@ void SGP4::FindPositionSDP4(Eci* eci, double tsince) const {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SGP4::FindPositionSGP4(Eci* eci, double tsince) const {
|
Eci SGP4::FindPositionSGP4(double tsince) const {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the final values
|
* the final values
|
||||||
|
|
@ -363,7 +363,7 @@ void SGP4::FindPositionSGP4(Eci* eci, double tsince) const {
|
||||||
* using calculated values, find position and velocity
|
* using calculated values, find position and velocity
|
||||||
* we can pass in constants from Initialize() as these dont change
|
* we can pass in constants from Initialize() as these dont change
|
||||||
*/
|
*/
|
||||||
CalculateFinalPositionVelocity(eci, tsince, e,
|
return CalculateFinalPositionVelocity(tsince, e,
|
||||||
a, omega, xl, xnode,
|
a, omega, xl, xnode,
|
||||||
xincl, common_consts_.xlcof, common_consts_.aycof,
|
xincl, common_consts_.xlcof, common_consts_.aycof,
|
||||||
common_consts_.x3thm1, common_consts_.x1mth2, common_consts_.x7thm1,
|
common_consts_.x3thm1, common_consts_.x1mth2, common_consts_.x7thm1,
|
||||||
|
|
@ -371,7 +371,7 @@ void SGP4::FindPositionSGP4(Eci* eci, double tsince) const {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SGP4::CalculateFinalPositionVelocity(Eci* eci, const double& tsince, const double& e,
|
Eci SGP4::CalculateFinalPositionVelocity(const double& tsince, const double& e,
|
||||||
const double& a, const double& omega, const double& xl, const double& xnode,
|
const double& a, const double& omega, const double& xl, const double& xnode,
|
||||||
const double& xincl, const double& xlcof, const double& aycof,
|
const double& xincl, const double& xlcof, const double& aycof,
|
||||||
const double& x3thm1, const double& x1mth2, const double& x7thm1,
|
const double& x3thm1, const double& x1mth2, const double& x7thm1,
|
||||||
|
|
@ -522,7 +522,9 @@ void SGP4::CalculateFinalPositionVelocity(Eci* eci, const double& tsince, const
|
||||||
Julian julian(elements_.Epoch());
|
Julian julian(elements_.Epoch());
|
||||||
julian.AddMin(tsince);
|
julian.AddMin(tsince);
|
||||||
|
|
||||||
(*eci) = Eci(julian, position, velocity);
|
Eci eci(julian, position, velocity);
|
||||||
|
|
||||||
|
return eci;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline double EvaluateCubicPolynomial(const double x, const double constant,
|
static inline double EvaluateCubicPolynomial(const double x, const double constant,
|
||||||
|
|
|
||||||
13
SGP4.h
13
SGP4.h
|
|
@ -6,14 +6,15 @@
|
||||||
#include "Eci.h"
|
#include "Eci.h"
|
||||||
#include "SatelliteException.h"
|
#include "SatelliteException.h"
|
||||||
|
|
||||||
class SGP4 {
|
class SGP4
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
SGP4(const Tle& tle);
|
SGP4(const Tle& tle);
|
||||||
virtual ~SGP4(void);
|
virtual ~SGP4(void);
|
||||||
|
|
||||||
void SetTle(const Tle& tle);
|
void SetTle(const Tle& tle);
|
||||||
void FindPosition(Eci* eci, double tsince) const;
|
Eci FindPosition(double tsince) const;
|
||||||
void FindPosition(Eci* eci, const Julian& date) const;
|
Eci FindPosition(const Julian& date) const;
|
||||||
|
|
||||||
struct CommonConstants {
|
struct CommonConstants {
|
||||||
|
|
||||||
|
|
@ -196,9 +197,9 @@ private:
|
||||||
double* omgasm, double* xnodes, double* xll) const;
|
double* omgasm, double* xnodes, double* xll) const;
|
||||||
void DeepSpaceSecular(const double& t, double* xll, double* omgasm,
|
void DeepSpaceSecular(const double& t, double* xll, double* omgasm,
|
||||||
double* xnodes, double* em, double* xinc, double* xn) const;
|
double* xnodes, double* em, double* xinc, double* xn) const;
|
||||||
void FindPositionSDP4(Eci* eci, double tsince) const;
|
Eci FindPositionSDP4(double tsince) const;
|
||||||
void FindPositionSGP4(Eci* eci, double tsince) const;
|
Eci FindPositionSGP4(double tsince) const;
|
||||||
void CalculateFinalPositionVelocity(Eci* eci, const double& tsince, const double& e,
|
Eci CalculateFinalPositionVelocity(const double& tsince, const double& e,
|
||||||
const double& a, const double& omega, const double& xl, const double& xnode,
|
const double& a, const double& omega, const double& xl, const double& xnode,
|
||||||
const double& xincl, const double& xlcof, const double& aycof,
|
const double& xincl, const double& xlcof, const double& aycof,
|
||||||
const double& x3thm1, const double& x1mth2, const double& x7thm1,
|
const double& x3thm1, const double& x1mth2, const double& x7thm1,
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,10 @@ int main() {
|
||||||
"1 25544U 98067A 11146.36888985 .00025753 00000-0 16912-3 0 4201",
|
"1 25544U 98067A 11146.36888985 .00025753 00000-0 16912-3 0 4201",
|
||||||
"2 25544 51.6504 272.6534 0003891 329.5510 71.2188 15.75539412717473");
|
"2 25544 51.6504 272.6534 0003891 329.5510 71.2188 15.75539412717473");
|
||||||
SGP4 sgp4(tle);
|
SGP4 sgp4(tle);
|
||||||
Eci eci;
|
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
Julian now;
|
Julian now;
|
||||||
sgp4.FindPosition(&eci, now);
|
Eci eci = sgp4.FindPosition(now);
|
||||||
CoordTopographic topo = obs.GetLookAngle(eci);
|
CoordTopographic topo = obs.GetLookAngle(eci);
|
||||||
CoordGeodetic geo = eci.ToGeodetic();
|
CoordGeodetic geo = eci.ToGeodetic();
|
||||||
std::cout << now << " ";
|
std::cout << now << " ";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue